仅使用Socket.io-node将数据发送给选定的用户

时间:2011-02-09 10:27:00

标签: javascript node.js websocket socket.io

是否可以使用socket.io-node仅向选定的用户组发送数据?例如,我如何实现与不同房间的聊天?我不希望.broadcast()向所有登录用户发送数据。

2 个答案:

答案 0 :(得分:3)

通常情况下,每个房间都应该有一个连接用户列表,而这些用户都有一个client对象,你应该存储在某个地方。因此,当您想要将消息发送到特定房间时,您只需要迭代该房间的已连接用户并访问他们的client对象并发送数据。

简而言之,您可能需要逐个将数据发送给组中的每个用户。

答案 1 :(得分:1)

socket.io具有内置的分组功能

在单个连接的套接字对象上,就像新用户连接时传递的那样,你可以调用.join('roomName'),其中roomName是你要用来标识“房间”的任何字符串,你可以使用像“profile / 14”这样的房间名称来创建一个频道,用于更新用户#14的个人资料。

然后在主io对象上执行以下操作:

io.sockets.in('profile/14').emit('newComment', {message:'hello'});

该消息将发送到所有具有.join()的给定房间的连接。

通常我会让我的客户端在onConnect上发出一个“hello”事件来识别客户端有兴趣订阅的内容,然后在服务器端我的“hello”事件的处理程序处理.join()'ing客户进入任何需要的房间