6

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

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

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

4

2 回答 2

20

有两种可能:

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

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

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

socket.join('priv/John');

connection处理程序中。现在,只要您只想发送消息到John,您只需执行

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

旁注:提供的第一个解决方案不能扩展到多台机器,所以我建议使用第二个。

于 2012-07-14T14:21:56.570 回答
3

您可以使用该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
于 2020-03-31T14:42:30.870 回答