我有一个用户使用socket.io连接到我的节点服务器的页面,但我只允许他们有一个打开的socket.io连接到服务器(通过在授权它们并将其存储在一个服务器时传递他们的帐户ID)数组)这99%的时间都很好。问题是,有时当用户断开连接时,服务器端断开事件由于某种原因不会触发,因此我无法从客户端阵列中清除他们的帐户,最终导致他们被锁定。
我有办法检查他们的旧套接字连接(我的ID是否仍然有效)吗? (所以,如果不是,我可以清除他们的旧连接,让他们再次连接)
答案 0 :(得分:4)
确保将心跳设置为true(默认值)。如果超时失效,则应自动断开连接。但是,有一个关于心跳无效的错误报告。确保你有最新版本的Socket.IO(我不确定bug的状态)。
如果您仍需要帮助,可以在用户尝试重新连接时向旧连接发送ping:
从服务器发出'ping',如果连接仍然存在,则从客户端回复'pong'。如果ping超时(比如20秒),请手动断开连接,以便用户重新连接。您可以使用ping来通知原始客户端另一个客户端正在尝试连接,并为此提出一些UI。