Socket.io 如何在socketio中查找房间中的客户数量

Socket.io 如何在socketio中查找房间中的客户数量,socket.io,Socket.io,因此,我正在尝试查找线路在特定时间连接到给定房间的客户端数量 if(rooms[code]!=null&&rooms[code].length==2){ 查看给定房间中是否有2个人。从其他文章中,我看到了io.sockets.adapter.rooms和变量Object.key(io.sockets.adapter.rooms)都应该这样做,但是两者都会返回[]。我还尝试了io.sockets.in(roomID).clients但它总是返回未定义的。客户端肯定会加入文件室,因为向文件室发送发射

因此,我正在尝试查找线路在特定时间连接到给定房间的客户端数量
if(rooms[code]!=null&&rooms[code].length==2){
查看给定房间中是否有2个人。从其他文章中,我看到了
io.sockets.adapter.rooms
和变量
Object.key(io.sockets.adapter.rooms)
都应该这样做,但是两者都会返回[]。我还尝试了
io.sockets.in(roomID).clients
但它总是返回未定义的。客户端肯定会加入文件室,因为向文件室发送发射信号是有效的,并且查看客户端所在的文件室表明他们加入了文件室。此外,我已经测试了加入多个客户端,我怀疑这是否是一个异步问题

我的socketio版本是3.0.1

代码(总是转到else,在else中它成功加入房间,并且输入发送正常):


您加入文件室的代码错误。您必须加入文件室,如下所示


这将为您提供“my_room”中加入的用户或套接字的数量。

我找到了答案,
io.sockets.adapter.rooms
是一个集合地图,这意味着获取特定房间的大小是
io.sockets.adapter.rooms.get(code).size
。我尝试做的似乎适用于早期版本,但不适用于>3。

谢谢您的回复,但是,我不知道我的代码在哪方面是错误的。问题是动态进入房间吗?不是object.keys,因为没有对象键也无法工作。您能指出问题的确切原因吗?您检查过了吗我检查了链接,但没有看到任何可以回答我问题的东西。另外,我仍然不确定你所说的加入代码是什么意思。我要说的是,不是我投了你的反对票,因为我甚至没有这样做的声誉。但我仍然希望澄清我做错了什么,在链接中我可以找到我的答案。
io.on("connection", (socket) => {
    socket.on('joinRoom', (code) => {
      let rooms = io.sockets.adapter.rooms;
      if( rooms[code]!=null && rooms[code].length===2){
        console.log("fullroom")
        socket.emit("fullRoom")
      }
      else{
        socket.join(code)
        console.log(io.sockets.adapter.rooms[code]) //undefined
        socket.on('moveEvent', (data)=>{
          io.broadcast.to(code).emit("moveResponse", data)
        })
      }
    })
})
io.on('connection', socket => {
  socket.join('some room');

var room = io.sockets.adapter.rooms['my_room'];
room.length;
});