2

我现在使用带有多个节点的 socket.io,因此我开始使用 socket.io-redis 适配器(https://github.com/socketio/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
});

这似乎非常低效,因为我会打很多电话来单独计算。有没有比这更有效的方法来获取具有关联连接数的所有房间的列表?我已经研究过修改适配器代码,但我并不太了解代码以进行任何更改。

4

1 回答 1

0

你找到解决办法了吗?

似乎 io.sockets.adapter.rooms 返回房间以及连接的客户端数量。但是不确定它是否适用于 redis-adapter 环境。

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

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

于 2018-04-10T07:28:47.263 回答