获取命名的房间列表

时间:2013-08-27 11:19:42

标签: node.js socket.io

在我的剧本中,我正在加入多个房间并且工作得很好。

服务器:

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,
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

因此,要获得用户数,只需在用户列表中使用length()