如何获得房间列表

如何获取最新版本(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作为一个房间清单?

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

不要忘记在sockets断开的情况下将它们移除

然后,减less房间清单:

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

也许还有其他的方法,但这是我想到的第一个。

由于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 ); } } 

您可以将ROOMS列表(与每个套接字/连接的ID不同)与:

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

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

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