通过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