【问题标题】:socket io send message to a user in a roomsocket io 向房间中的用户发送消息
【发布时间】:2013-01-03 13:35:42
【问题描述】:

我正在使用 nodejs 和 socketio。我制作了一个私人聊天应用程序,可以向选定的用户发送消息。

我当前的代码是:

          chat_room.sockets.socket(user).emit(
                'chat', 
                { 
                    message : message,
                    from : sockets[socket.id].username
                }
            );

现在我创建了房间,我想向特定房间的用户发送消息。

我尝试了下面的代码,但没有工作

socket.get('room', function(err, room) {
         chat_room.sockets.socket(room)(user).emit(
                'chat', 
                { 
                    message : message,
                    from : sockets[socket.id].username
                }
            );

});

它错了,它给了我一个错误:

C:\Users\Niraj\Desktop\node\joomla-chat\app.js:62 chat_room.sockets.socket(房间)(用户).emit( ^ 类型错误:对象不是函数 在 chat_room.sockets.on.socket.on.socketID (C:\Users\Niraj\Desktop\node\joomla-chat\app.js:62:45) 在 Client.get (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\stores\memory.js:86:3) 在 Socket.get (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\socket.js:258:14) 在 Socket.chat_room.sockets.on.socket.on.socketID (C:\Users\Niraj\Desktop\node\joomla-chat\app.js:48:16) 在 Socket.EventEmitter.emit [as $emit] (events.js:96:17) 在 SocketNamespace.handlePacket (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\namespace.js:335:22) 在 Manager.onClientMessage (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\manager.js:487:38) 在 WebSocket.Transport.onMessage (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\transport.js:387:20) 在解析器。 (C:\Users\Niraj\Desktop\node\joomla-chat\node_modules\socket.io\lib\transports\websocket\hybi-16.js:39:10) 在 Parser.EventEmitter.emit (events.js:96:17)

如何向房间的特定用户发送消息

-------------------编辑--------------- ------------- 所以如果我这样做:

socket.get('room', function(err, room) {
              chat_room.sockets.socket(user).emit(
                    'chat', 
                    { 
                        message : message,
                        from : sockets[socket.id].username
                    }
                );

        });

然后这会将消息发送到 Mr.X 到 ABC 房间

我说的对吗?

【问题讨论】:

  • 什么是变量“用户”?你如何联系他们将取决于你有什么信息(例如,如果你有他们的 socket.id,它只是一个简单的 socket.emit)
  • 它的socket ID 接收消息的人
  • 在这种情况下,您只需要对该用户执行 socket.emit;他们在一个房间里并不重要,传统的发射仍然可以正常工作
  • 请检查我编辑的问题
  • 不完全是;我会发布一个关于你应该做什么的答案......

标签: node.js socket.io chatroom


【解决方案1】:

无论您要联系的用户是否在房间内,只要您有正确的识别信息,联系他们的最简单方法仍然只是一个简单的 socket.emit()。

你说你已经有了他们的socket.id;如果是这样,那么获取他们的套接字对象就像:io.sockets.sockets[socket.id].

要发送消息,您可以说:io.sockets.sockets[socket.id].emit('identifier', data);

这应该可以回答您的问题,尽管这些是您可能会发现有帮助的另外两件事:

-向你关注的整个房间广播:io.sockets.in('room').emit('event_name', data)

-在 io.sockets 中存储了关于房间和连接的套接字的大量信息。我强烈建议您在代码开头添加 console.log(io.sockets); 并仔细检查该对象,看看您还能访问什么。

希望这会有所帮助!

【讨论】:

  • 谢谢,现在我很清楚,如果我有对方用户的套接字 ID,那么无论他是在这个房间还是任何其他房间都没关系,因为套接字 ID 将帮助他触发消息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2015-08-06
相关资源
最近更新 更多