如何在房间里获得socket.io客户端数量?

问题描述 投票:3回答:4

我的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));
javascript node.js web socket.io webrtc
4个回答
4
投票

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

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

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

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


2
投票

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

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]--;
});

1
投票

在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变量中保存所有连接。


0
投票

这对我有用。

// 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.