Socket.io:发送给指定的客户端

时间:2014-03-18 22:18:39

标签: javascript node.js sockets socket.io

我有一个node.js / socket.io webapp,目前正在正确地轮询API并使用发出的结果填充html页面。

我的问题是多人需要使用此功能,我想将他们的实例分开,以便每个人只接收查询结果。

现在,当任何人使用该网站时,它将返回可能也在使用该网站的其他用户的结果。 我试图用这种方法解决这个问题:

var clients = {};
 io.sockets.on('connection', function(socket){
    console.log("this is "+socket.id);
    clients.id = socket.id;
 })

io.sockets.socket(clients.id).emit('progress',{info:listing});

当然,这会被登录到站点的每个新用户所取代,因此发送给原始用户的所有内容现在都会发送给新用户。

我想知道的是,是否有任何内置函数可以解决这个问题,或者我是否应该继续使用另一个持久存储。

非常感谢任何帮助。

修改

将套接字对象存储在express.sessionStore中,而不是仅存储在程序中。         io.sockets.on(function(socket){ request.sessionStore.socket = socket; })

上面的代码现在有效,只发送给事件发起者。

2 个答案:

答案 0 :(得分:0)

这看起来像是在另一个帖子中得到了解答。我们的想法是创建一个客户端数组,并将其与某种类型的客户端/用户标识相关联,如ID或名称。

Sending a message to a client via its socket.id

答案 1 :(得分:0)

为什么不为每个用户创建a separate roomroom_<user_id>

您可以毫无问题地将数据发布到一个房间,并且用户可以加入多个浏览器窗口,因此多个参与者可以使用#34;他的&#34;然后是房间。相反,如果你只有一个数组将用户ID映射到一个连接,你就会遇到问题。

由于似乎有no limit to the number of rooms,我认为没有理由实现某些已经存在的默认功能。

相关问题