我如何在 socket.io 版本 4.x 中获取有关套接字的一些信息

How can i get some info on a Socket in socket.io version 4.x

当我在 nodeJs 上升级到 socket.io 的 4.x 版本时,我 运行 遇到了某些问题。 这是我面临的 2 个问题,一个是获取一个插座所属的所有房间的列表。当我打电话 socket.rooms 连接客户端后,我得到一个正确的响应,其中列出了一组中的所有房间。

根据我使用 io.sockets.sockets[536xdN11uf311xkFAAAD].rooms 阅读的内容,但这让我出现了以下错误。

TypeError: Cannot read property 'rooms' of undefined

如何在 4.x

中获取给定插座的房间

另外,我如何在不调用 io.sockets.sockets 的情况下获取给定套接字的套接字信息,然后对每个套接字执行一个操作以找到我正在寻找的套接字。

How can i get the rooms for a given socket in 4.x

socket.rooms 是一个 Set 对象,它列出了给定插座所在的房间。这在 socket.io v4.

中有记录

如果你有 socket.id 而不是套接字对象,你可以这样做:

const sockets = await io.in(theSocketId).fetchSockets();

这将是一个套接字数组,但如果您传入套接字 ID,则数组中将有零个或一个项目,具体取决于该套接字 ID 是否存在。这在文档中 here 并且是一种相当新的做事方式。

因此,将这些放在一起:

async function getRooms(socketid) {
    const sockets = await io.in(socketid).fetchSockets();
    if (!sockets.length) {
         throw new Error(`socketid ${socketid} is not found`);
    }
    return Array.from(sockets[0].rooms);
}

注意:您将在使用此接口时处理承诺(可能是因为通过 redis 或其他集群适配器支持远程适配器)。