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

how to get number of clients in room while using socket.io?

我想在使用 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.");
    }
  });
});

对于 3.0 及更高版本,您必须使用 rooms 对象的 get 函数。 使用 .size() 获取客户端数量。

所以它看起来像这样

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

之前的答案只有在至少一个用户拥有 joined/created 房间后才有效,在此之前我会报错,因为房间不存在。

我已经在另一个 .

中发布了 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