【问题标题】:How to get list of room如何获取房间列表
【发布时间】:2017-10-09 02:01:54
【问题描述】:

如何在最新版本(v1.3.7)的socket.io中获取房间列表?

io.nsps['/namespace'].adapter.rooms

将返回如下内容:

{ 
  mIfp3VIpt103xS3RAAAD: { mIfp3VIpt103xS3RAAAD: true },
  '9XaViM2Q-A1NGziRAAAE': { '9XaViM2Q-A1NGziRAAAE': true },
  science: { '9XaViM2Q-A1NGziRAAAE': true },
  '2FopECkAq5Z4AIHMAAAF': { '2FopECkAq5Z4AIHMAAAF': true },
  math: { '2FopECkAq5Z4AIHMAAAF': true },
  s3JRFhNUz1Tz9apeAAAH: { s3JRFhNUz1Tz9apeAAAH: true } 
}

显然那里唯一的房间是sciencemath
我怀疑其他人是套接字ID。

我怎样才能只获得sciencemath 作为房间列表?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    Socket.io 将为每个连接的套接字保留一个打开的房间,以便向单个套接字发送消息: socket.broadcast.to(id).emit('my message', msg)

    您可以保留已连接套接字 ID 的列表:

    var cached = []
    io.on('connection', function(socket) {
        if(cached.indexOf(socket.id) === -1)
           cached.push(socket.id)
    })
    

    不要忘记在套接字断开时删除它们

    然后,减少房间列表:

    var rooms = io.nsps['/namespace'].adapter.rooms
    var realRooms = {}
    for(var i in rooms) {
       if(~cached.indexOf(i)) {
            realRooms[i] = rooms[i]
       }
    }
    

    可能还有其他方法可以做到这一点,但这是我想到的第一个。

    【讨论】:

    • 这个~ 符号是干什么用的?
    • 这是按位的NOT 运算符,mozilla docs。基本上~(-1) 变为0,并将被评估为false。我的条件变成:如果i不在缓存数组中(indexOf-1),它就是一个房间。请参阅@slier 答案,io.nsps['/chatSystem'].adapter.sids 是一个包含不同套接字 id 的对象。
    • 哦,是你自己(问这个问题的人),我的错^^。
    【解决方案2】:

    由于io.nsps['/chatSystem'].adapter.sids 将返回已连接套接字的集合,这就是我解决问题的方法

    var realRooms = [];
    var rooms = io.nsps['/chatSystem'].adapter.rooms;
    var sids = io.nsps['/chatSystem'].adapter.sids;
    
    for ( var room in rooms ) {
        if ( !( room in sids ) ) {
              realRooms.push( room );
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以通过以下方式获取 ROOMS 列表(与每个套接字/连接的 id 不同):

      for(R in io.nsps)console.log(R);
      

      您的服务器/机器中每个 ROOM 的返回列表。

      (nsps 是每个命名空间的“内部名称”)

      【讨论】:

        猜你喜欢
        • 2016-12-04
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多