socket.io在使用node.js集群时获取所有房间



所以我有下面的代码,它工作得很好,但只有当我将node.js作为单线程(非集群环境(运行时

function getActiveRooms(io) {
// Convert map into 2D list:
// ==> [['4ziBKG9XFS06NdtH', Set(1)], ['room1', Set(2)], ...]
const arr = Array.from(io.sockets.adapter.rooms);
console.log('total rooms ' + arr.length)
// Filter rooms whose name exist in set:
// ==> [['room1', Set(2)], ['room2', Set(2)]]
const filtered = arr.filter(room => !room[1].has(room[0]))
// Return only the room name:
// ==> ['room1', 'room2']
const actives = filtered.map(i => i[0]);
console.log('active rooms ' + actives)
return actives;
}

但是,当我在32个集群节点(32个CPU/核心PC(中运行它时,在32个新房间中,每个集群只会得到一个房间,当我加入第33个房间时,它会将其循环添加到第一个节点。现在,实例将返回2个房间。

所以问题是,如何从运行集群的所有32个node.jssocket.io中获取所有房间?

我正在使用最新的"@socket.io/cluster-adapter": "^0.2.0",,但问题仍然存在,如何获得集群中所有房间的列表?非常感谢。

感谢

Sean

找到了我需要的东西:await io.fetchSockets();将从所有集群获取套接字

最新更新