gpt4 book ai didi

node.js - socket.io 获取所有已连接客户端数量的房间

转载 作者:太空宇宙 更新时间:2023-11-04 01:58:25 26 4
gpt4 key购买 nike

我现在在多个 Node 上使用 socket.io,因此我开始使用 socket.io-redis 适配器 ( https://github.com/socketio/socket.io-redis ) 来帮助我在 Node 之间同步。

我想有效地获取服务器上所有房间的列表以及每个房间中相应的客户端数量。

在任何时候,我都可能有数千个房间,并且希望快速统计每个房间的数量。

要获取我会做的所有房间的列表:

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 { sockets: { 'dypabpHYTZii0F-bAAAC': true, GtGoSvP5yCOrQoMMAAAD: true }, length: 2 }, 'dypabpHYTZii0F-bAAAC': Room { sockets: { 'dypabpHYTZii0F-bAAAC': true }, length: 1 }, GtGoSvP5yCOrQoMMAAAD: Room { sockets: { GtGoSvP5yCOrQoMMAAAD: true }, length: 1 } }

关于node.js - socket.io 获取所有已连接客户端数量的房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com