在我的剧本中,我正在加入多个房间并且工作得很好。
服务器:
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,
}
答案 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()
。