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

时间:2015-07-17 04:37:49

标签: javascript node.js web socket.io webrtc

我的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));

9 个答案:

答案 0 :(得分:4)

要获取会议室中的客户端数量,您可以执行以下操作:

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

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

如果您尚未定义名称空间,则默认名称为“/".

答案 1 :(得分:3)

这适用于版本3

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

答案 2 :(得分: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]--;
});

答案 3 :(得分: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变量中保留所有连接。

答案 4 :(得分:1)

这对我有用

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

答案 5 :(得分:1)

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

<块引用>

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

答案 6 :(得分: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);
}

答案 7 :(得分:0)

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

您使用 get(roomId) 获取 roomId 中该 Map 的值,并使用 .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")
     }
  })

答案 8 :(得分:0)

io.nsps['/'].adapter.rooms['your room name'].sockets;

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