如何检查插座是否仍然连接?

Mat*_*ain 7 node.js socket.io

我有一个用户使用socket.io连接到我的节点服务器的页面,但我只允许他们有一个打开的socket.io连接到服务器(通过在授权它们并将其存储在一个数组中时传递他们的帐户ID)和99%的情况下这很好用.问题是,有时当用户断开连接时,服务器端断开连接事件由于某种原因不会触发,因此我无法从客户端阵列中清除他们的帐户,最终导致他们被锁定.

有没有办法让我检查他们的旧套接字连接(我的ID是否仍然有效)?(所以,如果不是,我可以清除他们的旧连接,让他们再次连接)

Eri*_*ott 4

确保心跳设置为 true(默认值)。如果超时,应自动断开连接。然而,有一个关于心跳不起作用的错误报告。确保您拥有最新版本的 Socket.IO(我不确定错误的状态)。

如果您仍然需要帮助,您可以在用户尝试重新连接时向旧连接发送 ping:

从服务器发出“ping”,如果连接仍然存在,则从客户端回复“pong”。如果 ping 超时(例如 20 秒后),请手动断开连接,以便用户可以重新连接。您可以使用 ping 通知原始客户端另一个客户端正在尝试连接,并为此效果引发一些 UI。