【问题标题】:Socket.IO emit data into a room to myselfSocket.IO 将数据发送到我自己的房间
【发布时间】:2015-03-03 15:41:49
【问题描述】:

我正在构建一个聊天应用程序,我想在开始时加载 2 个用户之间的最后一条消息。

这是我在前端所做的,所以从数据库中加载旧的 messageList:

socket.emit('get messageList', data);

在后端,我将消息加载到messages 并尝试将它们发送回来。我不想broadcast.emit,因为我想在我的会话中加载数据,而不是在聊天伙伴中。

socket.in(roomId).emit('send messageList', messages);

当我执行此代码时,聊天伙伴的 messageList 会被刷新。基本上和

的效果是一样的
socket.in(roomId).broadcast.emit('send messageList', messages);

在我实现房间正常之前

socket.emit('send messageList', messages);

会像我预期的那样更新我的列表。但由于我将代码与房间一起使用,它不再起作用了。

我的问题:

  • 这是为什么呢?
  • 是否可以使用 socket.io 将数据从后端发送回客户端?
  • 还是我做错了什么?

【问题讨论】:

  • 如果您只是试图响应向您发送请求的客户端,您只需 socket.emit() 回到请求套接字。您只是试图回复发件人,因此您不会因为使用聊天室而做任何不同的事情。无论聊天室使用情况如何,响应都会发送到请求它的套接字。
  • 所以,你的意思是在我的情况下,我不必排放回房间(因为我已经在房间里了)并且我的旧代码 socket.emit('send messageList', messages); 是正确的解决方案?我不确定这是否是正确的方法。但如果是这样的话,那就比我想象的要容易!谢谢!

标签: javascript node.js websocket socket.io


【解决方案1】:

我会把我的评论变成一个答案,因为这似乎对你有用。

如果您只是想响应向您发送请求的客户端,您只需 socket.emit() 回到请求套接字。您只是试图回复发件人,因此您不会因为使用聊天室而做任何不同的事情。无论聊天室使用情况如何,响应都会发送到请求它的套接字。

要发送到单个客户端,您只需发送到该客户端的套接字。如果您想向该房间中的所有客户或房间中除一个以外的所有客户发送信息,您只能使用聊天室来帮助发送。

【讨论】:

    【解决方案2】:
    socket.nsp.to(room).emit('room_message','hello world')
    

    【讨论】:

    • 请添加一些解释以阐明您的代码回答问题的原因。
    • 刚刚经过测试,可以将其发送到房间中的所有套接字
    • 这会抛出一个错误:TypeError: Cannot read property 'emit' of undefined
    • 你救了我的命 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多