【问题标题】:socket.io get all rooms with number of clients connectedsocket.io 获取所有连接了客户端数量的房间
【发布时间】:2018-04-06 01:31:22
【问题描述】:

我现在使用带有多个节点的 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
});

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

【问题讨论】:

    标签: node.js sockets socket.io socket.io-redis


    【解决方案1】:

    你找到解决办法了吗?

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

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

    { 某个房间:房间 { 套接字:{'dypabpHYTZii0F-bAAAC':真,GtGoSvP5yCOrQoMMAAAD:真}, 长度:2 },“dypabpHYTZii0F-bAAAC”:房间 { 套接字:{“dypabpHYTZii0F-bAAAC”:真},长度:1 },GtGoSvP5yCOrQoMMAAAD: 房间 { 套接字:{ GtGoSvP5yCOrQoMMAAAD: true },长度:1 } }

    【讨论】:

    • 这仅适用于单个节点。这不适用于socket.io-redis
    猜你喜欢
    • 2015-01-05
    • 2015-10-06
    • 2018-01-09
    • 1970-01-01
    • 2017-05-22
    • 2021-03-08
    • 1970-01-01
    • 2021-03-18
    • 2013-04-06
    相关资源
    最近更新 更多