列出房间总数的房间

时间:2014-06-13 23:39:30

标签: node.js socket.io

我如何根据每个房间的人数返回房间列表?

我为每个连接使用socket.userID,我确信可以用它来计算。

1 个答案:

答案 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个房间。