我如何根据每个房间的人数返回房间列表?
我为每个连接使用socket.userID,我确信可以用它来计算。
答案 0 :(得分:0)
这可以通过以下两个函数完成(第一个函数取自this topic):
var getRoomUserNum = function(roomName, namespace) {
if (!namespace) namespace = '/';
var room = io.nsps[namespace].adapter.rooms[roomName];
if (!room) return null;
return Object.keys(room).length;
}
var getRoomsSortedByUserNum = function(namespace) {
if (!namespace) namespace = '/';
var roomsUsersNum = {};
var roomNames = [];
for (var roomName in io.nsps[namespace].adapter.rooms) {
roomsUsersNum[roomName] = getRoomUserNum(roomName, namespace);
roomNames.push(roomName);
}
roomNames.sort(function(a, b) {
return roomsUsersNum[a] < roomsUsersNum[b] ? 1 : -1;
});
return roomNames;
}
然后你只需要调用getRoomsSortedByUserNum();
可选地将你的命名空间作为参数传递(默认为/
),然后返回一个房间名称数组,按每个用户的数量排序。
但请记住,当每个套接字连接时,it's own room is automatically created。因此,如果你有20个插座和3个手动创建的房间,你实际上有23个房间。