我有一个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;
})
上面的代码现在有效,只发送给事件发起者。
答案 0 :(得分:0)
这看起来像是在另一个帖子中得到了解答。我们的想法是创建一个客户端数组,并将其与某种类型的客户端/用户标识相关联,如ID或名称。
答案 1 :(得分:0)
为什么不为每个用户创建a separate room? room_<user_id>
您可以毫无问题地将数据发布到一个房间,并且用户可以加入多个浏览器窗口,因此多个参与者可以使用#34;他的&#34;然后是房间。相反,如果你只有一个数组将用户ID映射到一个连接,你就会遇到问题。
由于似乎有no limit to the number of rooms,我认为没有理由实现某些已经存在的默认功能。