socket.io 通过 XHR 轮询强制断开连接

2024-01-20

我有一个客户端/服务器应用程序,在服务器上使用nodejs,并使用socket.io 作为连接机制。出于与我的应用程序相关的原因,我希望每个浏览器只有一个活动连接,并拒绝来自稍后可能在会话期间打开的其他选项卡的所有连接。这对于 WebSockets 非常有用,但是如果浏览器不支持 WebSockets 并且使用 XHR 轮询,则永远不会发生断开连接,因此如果用户只是刷新页面,这不会被解释为重新连接(我有一个延迟重新连接和会话恢复),但作为一个新选项卡,最终会导致连接被拒绝,因为同一选项卡建立的旧连接仍然处于活动状态。

我正在寻找一种方法,可以在刷新发生时有效地终止客户端的连接。我尝试过绑定到beforeunload并打电话socket.disconnect()在客户端,还发送一条消息,例如socket.emit('force-disconnect')并触发与服务器的断开连接但没有成功。我在这里错过了什么吗?感谢你的帮助!

我读了这个问题 https://stackoverflow.com/questions/5048231/force-client-disconnect-from-server-with-socket-io-and-nodejs并且找不到它对我的具体情况有用。


问题解决了,原来是一个bug https://github.com/LearnBoost/socket.io/issues/461引入于socket.io 0.9.5。如果您遇到此问题,只需将服务器和客户端代码更新为socket.io > 0.9.9并设置 socket.io 客户端选项sync disconnect on unload to true一切就绪。

选项设置如下:

var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket.io 通过 XHR 轮询强制断开连接 的相关文章

随机推荐