0

在我的脚本中,我加入了多个房间,效果很好。

服务器:

io.sockets.on("connection", function(socket) {
    socket.on("join", function(room) {
       socket.join(room);
    });
});

客户:

socket.emit("join", "website");
socket.emit("join", "user");
socket.emit("join", "front");

但是,如果我尝试通过列出它们,io.rooms我会得到一个由空键和一组房间组成的奇怪对象,但带有它们的 ID(我猜),而不是它们的名字。

{ '':
   [ 'FcETdaJ3P4R-IyGdevLj',
     '9Qv2tEe3-IrKleFSevLk',
     'F6G6nq5r8lM_nI-ievLl' ] }

如何检索具有连接用户数的命名房间列表,例如:

{
    "website": 6,
    "front": 4,
    "user": 1,
}
4

2 回答 2

0

io.rooms是列出房间的正确方法。对象中的键是房间的名称,数组是连接的客户端的 ID。''是默认房间,因此当您尝试登录时,似乎没有人连接到任何房间。

于 2013-08-27T12:27:12.943 回答
0

该变量io.sockets.manager.rooms将为您提供一个包含全局房间、所有其他房间以及这些房间中客户 ID 的对象。

console.log(io.sockets.manager.rooms);

rooms: {
  '': [
    'IDJYUhL2RMNGiulk5Aii'
  ],
  'room1': [
    'IDJYUhL2RMNGiulk5Aii',
    'dTtHIdIzSfV96kbu5Aij'
  ],
  'room2': [
    'dTtHIdIzSfV96kbu5Aij'
  ]
}

因此,要获取用户数,只需length()在用户列表上使用。

于 2013-08-27T13:12:06.110 回答