socket io向房间中的用户发送消息

时间:2013-01-20 07:58:51

标签: node.js socket.io chatroom

我正在使用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:\用户\尼拉吉\桌面\节点\的Joomla聊天\ app.js:62                 chat_room.sockets.socket(室)(用户).emit(                                               ^ TypeError:object不是函数       在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)       在Parser。 (C:\用户\尼拉吉\桌面\节点\的Joomla-聊天\ node_modules \ socket.io \ lib中\运输\的WebSocket \ hybi-16.js:39:10)       在Parser.EventEmitter.emit(events.js:96:17)

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

------------------------------- EDIT --------------- ------------- 所以,如果我这样做:

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

        });

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

我是对的吗?

1 个答案:

答案 0 :(得分: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);并仔细检查对象以查看您可以访问的其他内容。

希望这有帮助!