socket.io - 向某些用户广播

时间:2012-07-14 14:06:58

标签: javascript node.js websocket socket.io

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

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

但是如何将其从特定用户广播到特定用户?

2 个答案:

答案 0 :(得分:17)

有两种可能性:

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

即可
io.sockets[id].emit(...)

2)定义您自己的ID(例如用户名)并使用

socket.join('priv/John');
connection处理程序中的

。现在,只要您想要向John发送消息,您只需执行

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

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

答案 1 :(得分:1)

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

socket.on('init', function(user) {
  if (user.type == 'dog') {
    socket.join('dogs');
  }
  else {
    socket.join('cats');
  }
});

...

io.to('dogs').emit('food', 'bone'); // Only dogs will receive it
io.to('cats').emit('food', 'milk'); // Only cats will receive it