我有一个客户端/服务器应用程序,在服务器上使用 nodejs 并使用 socket.io 作为连接机制。出于与我的应用程序相关的原因,我希望每个浏览器只有一个事件连接,并拒绝来自其他选项卡的所有连接,这些连接可能会在 session 期间稍后打开。这对 WebSockets 很有效,但是如果浏览器不支持 WebSockets 而是使用 XHR 轮询,断开连接永远不会发生,所以如果用户只是刷新页面,这不会被解释为重新连接(我有一个延迟重新连接和 session 恢复),但作为一个新选项卡,它以连接被拒绝而结束,因为由同一选项卡建立的旧连接仍然处于事件状态。
我正在寻找一种方法来在刷新发生时有效地终止来自客户端的连接。我尝试绑定(bind)到 beforeunload
并在客户端调用 socket.disconnect()
,并发送一条消息,如 socket.emit('force- disconnect')
并触发与服务器的断开连接但没有成功。我在这里错过了什么吗?感谢你的帮助!
我读过 this question并且找不到它对我的特殊情况有用。
最佳答案
问题解决了,原来是bug在 socket.io 0.9.5
中引入。如果您遇到此问题,只需将您的服务器和客户端代码都更新为 socket.io > 0.9.9
并设置 socket.io 客户端选项 sync disconnect on unload
为 true
,一切就绪。
选项是这样设置的:
var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});
关于node.js - socket.io 通过 XHR 轮询强制断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043893/