如何获取房间中的socket.io客户端数量?

Posted

技术标签:

【中文标题】如何获取房间中的socket.io客户端数量?【英文标题】:how to get socket.io number of clients in room? 【发布时间】:2015-10-06 17:47:00 【问题描述】:

我的 socket.io 版本 1.3.5

我想获取特定房间的客户数量。

这是我的代码。

 socket.on('create or join', function (numClients, room) 
            socket.join(room);
    );

我使用此代码让客户进入房间:

console.log('Number of clients',io.sockets.clients(room));

【问题讨论】:

请详细说明您需要什么帮助。 我想获取特定房间的客户数量 【参考方案1】:

这适用于版本 3

io.sockets.adapter.rooms.get(roomName).size

【讨论】:

【参考方案2】:

要获取房间中的客户数量,您可以执行以下操作:

    function NumClientsInRoom(namespace, room) 
      var clients = io.nsps[namespace].adapter.rooms[room];
      return Object.keys(clients).length;
    

此变量 clients 将保存一个对象,其中每个客户端都是一个键。 然后,您只需获取该对象中的客户端(键)的数量。

如果您尚未定义命名空间,则默认命名空间为“/”。

【讨论】:

【参考方案3】:

有一个计数器变量来保持计数,当有人加入时增加,当有人断开时减少。

io.on('connection', function (socket) 

var numClients = ;

socket.on('join', function (room) 
    socket.join(room);
    socket.room = room;
    if (numClients[room] == undefined) 
        numClients[room] = 1;
     else 
        numClients[room]++;
    
);

socket.on('disconnect', function () 
     numClients[socket.room]--;
);

【讨论】:

房间名称是动态的,来自客户端。 编辑为使用房间变量。 我认为您的代码显示了 sock.io 中的客户总数 您想统计每个动态房间吗? 更新:现在,您可以通过numClients[socket.room]获取每个房间的客户数量。【参考方案4】:

这对我有用。

// check if your room isn't undefined.
if (io.sockets.adapter.rooms['your room name']) 

   // result
   console.log(io.sockets.adapter.rooms['your room name'].length);

【讨论】:

【参考方案5】:

这对我有用

io.in('yourRoom').allSockets().then(result=>
    console.log(res.size) )

【讨论】:

【参考方案6】:

在 socket.io ^1.4.6

function numClientsInRoom(namespace, room) 
    var clients = io.nsps[namespace].adapter.rooms[room].sockets;
    return Object.keys(clients).length;

您需要将.sockets 添加到rooms[room],因为变量客户端将所有连接保存在sockets 变量中。

【讨论】:

【参考方案7】:

我参加聚会有点晚了,但我找到了一个有效的解决方案:

io.in('YOUR_ROOM').engine.clientsCount;

【讨论】:

【参考方案8】:

socket.io 的rooms 是一个Map,其元素映射到Sets。

您使用get(roomId) 来获取MaproomId 的值,并且您使用.size 来获取集合中的元素数量,而.length 用于获取数组中的元素数量。

socket.on("join-room",roomId => 
    const room = io.of("/yourNameSpace").adapter.rooms.get(roomId)
     if(room === undefined || room.size < 2) 
       socket.join(roomId)
     else 
       io.of("/yourNameSpace").emit("can't join link")
     
  )

【讨论】:

【参考方案9】:
io.nsps['/'].adapter.rooms['your room name'].sockets;

如果您的命名空间不是/,请更改它。

【讨论】:

这对我有用。 var count = io._nsps.get('/').adapter.rooms.get(roomName).size;

以上是关于如何获取房间中的socket.io客户端数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 socket.io 1.0 中获取房间的客户列表

socket io v1 中房间内的客户端数量

向 Socket.io 中的其他房间发送消息

Socket IO Rooms:获取特定房间的客户端列表

如何使用集群处理 Socket.IO 房间?

如何在socket.io中发射到房间? [复制]