我有一个客户机/服务器应用程序,它使用服务器上的nodejs和socket.io作为连接机制。由于与我的应用程序相关的原因,我希望每个浏览器只有一个活动连接,并拒绝来自稍后可能在会话期间打开的其他选项卡的所有连接。这对于WebSockets非常有效,但是如果浏览器不支持WebSockets,而使用XHR-polling,则永远不会发生断开,所以如果用户只是刷新页面,这不会被解释为重新连接(我有一个重新连接和会话恢复的延迟),而是作为一个新选项卡,它以连接被拒绝结束,因为同一个选项卡建立的旧连接仍然处于活动状态。
我正在寻找一种方法,以便在发生刷新时有效地结束来自客户端的连接。我尝试了绑定到beforeunload并在客户端调用socket.disconnect(),还发送了像socket.emit('force-disconnect')这样的消息并触发了与服务器的断开连接,但没有成功。我是不是漏掉了什么?感谢您的帮助!
我已经阅读了this question,但我发现它对我的特定情况并不有用。
发布于 2012-08-22 00:19:41
解决了这个问题,原来它是socket.io 0.9.5中引入的一个bug。如果遇到此问题,只需将服务器和客户端代码都更新为socket.io > 0.9.9,并将socket.io客户端选项sync disconnect on unload设置为true,即可完成所有设置。
选项是这样设置的:
var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});发布于 2014-01-30 19:08:40
如果打开的文件描述符用完,您还会得到"Error: xhr poll error“。这很可能在负载测试期间发生。
检查当前打开的文件描述符大小:
ulimit -n将其增加到一个较高的数字:
ulimit -n 1000000https://stackoverflow.com/questions/12043893
复制相似问题