socket.io力过XHR轮询断开(socket.io force a disconnect ov

2019-06-27 05:14发布

我必须使用服务器和socket.io作为连接机制上一个的NodeJS客户端/服务器应用程序。 对于我的应用程序相关的原因,我想有每个浏览器只有一个活动的连接,并拒绝来自可在会话期间稍后打开其他选项卡的所有连接。 这个伟大的工程使用WebSockets,但是如果的WebSockets不是由浏览器和XHR轮询支持来代替,断开不会发生,因此,如果用户只需刷新页面,这不被解释为再连接(我有一个延迟重新连接和会话恢复),但作为一个新的选项卡,在连接从而结束被拒绝,因为此相同的选项卡中所做的老连接仍然有效。

我正在寻找一种方式来有效地从结束时刷新发生在客户端的连接。 我试着结合beforeunload并调用socket.disconnect()在客户端,并且还发送这样的消息socket.emit('force-disconnect')并从没有成功服务器触发断开。 我失去了一些东西在这里? 感谢您的帮助!

我读过这个问题 ,但没有找到它为我的特殊情况下非常有用。

Answer 1:

解决这个问题,事实证明这是一个错误的介绍socket.io 0.9.5 。 如果你有这个问题只是同时更新您的服务器和客户端代码socket.io > 0.9.9并设置socket.io客户端选项sync disconnect on unloadtrue和你所有的设置。

选项设置是这样的:

var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});


Answer 2:

您还可以得到“错误:XHR轮询错误”,如果你用完了可用打开的文件描述符。 这可能是一个负载测试期间发生。

检查当前打开的文件量大小:

ulimit -n

它提高到一个较高的数字:

ulimit -n 1000000


文章来源: socket.io force a disconnect over XHR-polling