我正在使用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房间
我是对的吗?
答案 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);
并仔细检查对象以查看您可以访问的其他内容。
希望这有帮助!