1

我正在使用 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
                }
            );

});

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

\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)在 Parser。(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 房间

我对吗?

4

1 回答 1

8

不管你想联系的用户是否在房间里,只要你有正确的识别信息,联系他们的最简单方法仍然只是一个简单的 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);在代码的开头加上 a 并仔细检查该对象以查看您还可以访问什么。

希望这可以帮助!

于 2013-01-20T08:36:02.960 回答