Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 按房间总数列出房间_Node.js_Socket.io - Fatal编程技术网

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