to get rooms use
Object.keys(socket.adapter.rooms);
Object.keys(socket.adapter.rooms)[1];
var realRooms = Object.keys(io.sockets.adapter.rooms).reduce((filtered, key) => {
if(!io.sockets.adapter.rooms[key].sockets.hasOwnProperty(key)) filtered.push(key);
return filtered;
}, []);
我没有足够的声望来发布我的评论到原始问题,但是另外,如果你想列出命名空间中的所有房间,应该这样编码:
var nsp = io.of('/my-nsp');
var rooms = nsp.adapter.rooms;
这将有助于客户端加入房间:
socket.join('my-room');
当你执行 console.log(rooms);
时,你应该能够看到你的房间名。
我只是想回答上面一个未回答的评论,因为我遇到了同样的问题,之后发现有不匹配的房间名。
io.socket.of('').adapter.rooms[room]
- pery mimon对于套接字 v4。这个可以工作:
io.sockets.adapter.rooms.get("id of the room")
function ActiveRooms(){
var activeRooms = [];
Object.keys(io.sockets.adapter.rooms).forEach(room=>{
var isRoom = true;
Object.keys(io.sockets.adapter.sids).forEach(id=>{
isRoom = (id === room)? false: isRoom;
});
if(isRoom)activeRooms.push(room);
});
return activeRooms;}
// if you are not using namespaces
Array.from(io.of("/").adapter.rooms.keys());
// if you are using namespaces
Array.from(io.of("/your-namespace").adapter.rooms.keys());
// output: ["room1", "room2", ...]
await io.in(roomID).fetchSockets()