使用 socket.io 时如何获取房间内的客户端数量?

Posted

技术标签:

【中文标题】使用 socket.io 时如何获取房间内的客户端数量?【英文标题】:how to get number of clients in room while using socket.io? 【发布时间】:2021-03-08 00:23:36 【问题描述】:

我想在使用 socket.io

时获得房间内的参与者数量

这就是我想做的事情

io.on("connection", function (socket) 
  console.log("User Connected " + socket.id);

  io.on("join", function (roomName) 
    var numClients = io.sockets.adapter.rooms[roomName].length;
    if (numClients == 0) 
      socket.join(roomName);
     else if (numClients == 1) 
      socket.join(roomName);
     else 
      console.log("More than 2 users.");
    
  );
);

【问题讨论】:

【参考方案1】:

对于 3.0 及更高版本,您必须将 get 函数与房间对象一起使用。 使用 .size() 获取客户端数量。

所以它看起来像这样

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

【讨论】:

【参考方案2】:

上一个答案只有在至少一个用户加入/创建房间后才有效,在此之前我会给出一个错误,因为房间不存在。

我已经在另一个question 的io.sockets.adapter.rooms 中发布了地图。

因此,对我有用的方法(“socket.io”:“^4.1.2”)是使用以下命令询问房间中的客户数量:

let clientsInRoom = 0;
if (io.sockets.adapter.rooms.has(room)) clientsInRoom = io.sockets.adapter.rooms.get(room).size

【讨论】:

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

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

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

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

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

socket io 广播、房间和确认功能

socket io 广播、房间和确认功能