Node.js socket.io获取连接了多个客户端的所有房间

Node.js socket.io获取连接了多个客户端的所有房间,node.js,sockets,socket.io,socket.io-redis,Node.js,Sockets,Socket.io,Socket.io Redis,我现在将socket.io用于多个节点,因此我开始使用socket.io-redis适配器()来帮助我在节点之间进行同步 我想得到服务器上所有房间的列表,以及每个房间中相应数量的客户端 在任何时候,我可能有数千个房间,并希望得到一个快速计数每个房间 要获得所有房间的列表,我将执行以下操作: io.of('/').adapter.allRooms((err, rooms) => { console.log(rooms); // an array containing all rooms

我现在将socket.io用于多个节点,因此我开始使用socket.io-redis适配器()来帮助我在节点之间进行同步

我想得到服务器上所有房间的列表,以及每个房间中相应数量的客户端

在任何时候,我可能有数千个房间,并希望得到一个快速计数每个房间

要获得所有房间的列表,我将执行以下操作:

io.of('/').adapter.allRooms((err, rooms) => {
  console.log(rooms); // an array containing all rooms (accross every node)
});
这将返回所有房间的列表,但此时我不确定每个用户有多少连接

然后,我可以运行下一个查询,分别获取每个房间的计数:

//query the first room, second room and so on...
io.in('firstroom').clients((err, clients) => {
  console.log(clients); // an array containing socket ids in 'room3'. Aggregate them to get the count
});

这似乎是非常低效的,因为我将作出这么多的电话,以获得单独的计数。有没有比这更有效的方法来获取所有房间的列表以及关联的连接计数?我已经研究过如何修改适配器代码,但我并不完全理解代码,因此无法进行任何更改

你找到解决办法了吗

似乎io.sockets.adapter.rooms会返回房间以及连接的客户端数量。但是,不确定它是否在redis适配器环境中工作

例如,2个人连接到“someroom”,io.sockets.adapter.rooms返回以下信息

{someroom:Room{ 套接字:{'dypabpHYTZii0F bAAAC':true,GtGoSvP5yCOrQoMMAAAD:true}, 长度:2},'dypabpHYTZii0F bAAAC':房间{插座:{'dypabpHYTZii0F bAAAC':true},长度:1},GtGoSvP5yCOrQoMMAAAD: 房间{sockets:{GtGoSvP5yCOrQoMMAAAD:true},长度:1}


你找到解决办法了吗

似乎io.sockets.adapter.rooms会返回房间以及连接的客户端数量。但是,不确定它是否在redis适配器环境中工作

例如,2个人连接到“someroom”,io.sockets.adapter.rooms返回以下信息

{someroom:Room{ 套接字:{'dypabpHYTZii0F bAAAC':true,GtGoSvP5yCOrQoMMAAAD:true}, 长度:2},'dypabpHYTZii0F bAAAC':房间{插座:{'dypabpHYTZii0F bAAAC':true},长度:1},GtGoSvP5yCOrQoMMAAAD: 房间{sockets:{GtGoSvP5yCOrQoMMAAAD:true},长度:1}


这仅适用于单个节点。这不适用于
socket.io redis
。这仅适用于单个节点。这不适用于
socket.io redis