首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.io强制通过XHR-polling断开连接

socket.io强制通过XHR-polling断开连接
EN

Stack Overflow用户
提问于 2012-08-21 03:30:49
回答 2查看 5.8K关注 0票数 5

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

我正在寻找一种方法,以便在发生刷新时有效地结束来自客户端的连接。我尝试了绑定到beforeunload并在客户端调用socket.disconnect(),还发送了像socket.emit('force-disconnect')这样的消息并触发了与服务器的断开连接,但没有成功。我是不是漏掉了什么?感谢您的帮助!

我已经阅读了this question,但我发现它对我的特定情况并不有用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-22 00:19:41

解决了这个问题,原来它是socket.io 0.9.5中引入的一个bug。如果遇到此问题,只需将服务器和客户端代码都更新为socket.io > 0.9.9,并将socket.io客户端选项sync disconnect on unload设置为true,即可完成所有设置。

选项是这样设置的:

代码语言:javascript
复制
var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});
票数 10
EN

Stack Overflow用户

发布于 2014-01-30 19:08:40

如果打开的文件描述符用完,您还会得到"Error: xhr poll error“。这很可能在负载测试期间发生。

检查当前打开的文件描述符大小:

代码语言:javascript
复制
ulimit -n

将其增加到一个较高的数字:

代码语言:javascript
复制
ulimit -n 1000000
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12043893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档