通过io.sockets.sockets解析时如何获取socket id

Posted

技术标签:

【中文标题】通过io.sockets.sockets解析时如何获取socket id【英文标题】:How to get the socket id when parsing through io.sockets.sockets 【发布时间】:2021-12-17 11:58:12 【问题描述】:

我在 Node.js 服务器上使用 Socket.io。

for (connectedSocket of io.sockets.sockets) 
    console.log(`TEST: id = $connectedSocket.id`) //Why is this 'undefined'? All I want is the unique identifier of each socket in the server.

不知道如何解决这个问题,但它必须非常简单。抱歉,代码格式化失败:o

【问题讨论】:

【参考方案1】:

从 socket.io v3 开始,io.sockets 现在是 Map 对象,如 here 所示。你可以直接迭代它:

for (let [id, socket] of io.sockets.entries()) 
    // can use socket here

您可以使用更新的界面:

let socketsArray = await io.fetchSockets();

为您提供一组已连接的套接字。

注意,您还可以将fetchSockets() 与房间和命名空间一起使用,如here 所示。

【讨论】:

很好,这可能导致任何竞争条件?这是我的“连接”事件的开始,几乎所有其他东西都是 socket.on() 函数,但我只是好奇在这种情况下使用 await 是否有危险。 @nickcoding2 - 查看我的最新编辑以获取另一个选项。我怀疑.fetchSockets() 使用await,因为它适用于集群和其他适配器。 await 是否会导致竞争条件完全取决于您对该结果所做的工作。

以上是关于通过io.sockets.sockets解析时如何获取socket id的主要内容,如果未能解决你的问题,请参考以下文章

从解析仪表板上传时如何减小图像大小

如何解决解析功能文件时出错的runtime.cucumberexception

使用 IntelliJ IDEA 进行调试时如何解析 JSP 中的 Spring 模型变量?

黑莓:解析 XML 时如何获取 Node 的原始内容

如何将运行时参数作为依赖解析的一部分传递?

解析多个xml文件时如何检查空xml文件[重复]