我如何在 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 或其他集群适配器支持远程适配器)。
当我在 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 或其他集群适配器支持远程适配器)。