Javascript socket.io-向特定用户广播

Javascript socket.io-向特定用户广播,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,我需要使用websockets(socket.io+node.js)构建两个聊天室。 因此,向所有用户广播消息的简单示例如下: socket.on('user message', function (msg) { socket.broadcast.emit('user message', socket.nickname, msg); }); 但是我怎样才能从某个用户向某个用户广播呢?有两种可能: 1)每个套接字都有自己的唯一ID存储在socket.ID中。如果您知道两个用户的ID,

我需要使用websockets(socket.io+node.js)构建两个聊天室。 因此,向所有用户广播消息的简单示例如下:

socket.on('user message', function (msg) {
    socket.broadcast.emit('user message', socket.nickname, msg);
  });

但是我怎样才能从某个用户向某个用户广播呢?

有两种可能:

1)每个套接字都有自己的唯一ID存储在
socket.ID
中。如果您知道两个用户的ID,那么您可以简单地使用

io.sockets[id].emit(...)
2)定义您自己的ID(例如用户名)并使用

连接中
处理程序。现在,只要您只想将消息发送给
约翰
,您只需这样做即可

socket.broadcast.to('priv/John').emit(...)

旁注:提供的第一个解决方案无法扩展到多台机器,因此我建议使用第二个解决方案。

您可以使用
socket.join(…)
函数来提供组:

socket.on('init',函数(用户){
如果(user.type==“dog”){
连接('dogs');
}
否则{
socket.join('cats');
}
});
...
io.to(‘狗’)。发出(‘食物’、‘骨头’);//只有狗才会收到
io.to(‘猫’)。发出(‘食物’、‘牛奶’);//只有猫会收到它

我正在用rails将用户存储在MySQL中,因此,如何将用户ID从db关联到套接字ID?小问题:将用户添加到多个文件室(使用
加入
)是否会在服务器上造成负载?@MarkPegasov很抱歉响应太晚。您必须将具体的套接字映射到用户ID。为此,您需要一些身份验证机制。@Shlomi是的,您所做的几乎每件事都会占用一些资源。然而,在这种具体情况下,性能影响应该可以忽略不计。不过,一定要测量。
socket.broadcast.to('priv/John').emit(...)