Node.js 按房间总数列出房间
根据每个房间里有多少人,我该如何返回房间列表Node.js 按房间总数列出房间,node.js,socket.io,Node.js,Socket.io,根据每个房间里有多少人,我该如何返回房间列表 我正在为每个连接使用socket.userID,我确信这些连接可以用来计算这个值。这可以通过以下两个函数来完成(第一个函数取自): var getRoomUserNum=函数(roomName,命名空间){ 如果(!namespace)命名空间=“/”; var room=io.nsps[namespace].adapter.rooms[roomName]; 如果(!room)返回空值; 返回对象。键(房间)。长度; } var getRoomsSo
我正在为每个连接使用socket.userID,我确信这些连接可以用来计算这个值。这可以通过以下两个函数来完成(第一个函数取自):
var getRoomUserNum=函数(roomName,命名空间){
如果(!namespace)命名空间=“/”;
var room=io.nsps[namespace].adapter.rooms[roomName];
如果(!room)返回空值;
返回对象。键(房间)。长度;
}
var getRoomsSortedByUserNum=函数(名称空间){
如果(!namespace)命名空间=“/”;
var roomsUsersNum={};
var roomNames=[];
for(io.nsps[namespace].adapter.rooms中的var roomName){
RoomSuserNum[roomName]=getRoomUserNum(roomName,命名空间);
roomNames.push(roomName);
}
roomNames.sort(函数(a,b){
返回RoomsUserNum[a]
然后您只需调用getRoomsSortedByUserNum()
可以选择将名称空间作为参数传递(默认情况下为/
),并返回按每个房间中的用户数排序的房间名称数组
但请记住,当每个插座连接时。因此,如果您有20个插座和3个手动创建的房间,那么实际上您有23个房间
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;
}