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

标签 node.js socket.io long-polling

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

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

我读过 this question并且找不到它对我的特殊情况有用。

最佳答案

问题解决了,原来是bugsocket.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});

关于node.js - socket.io 通过 XHR 轮询强制断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12043893/

相关文章:

node.js - 在 node.js 缓冲区中搜索字节模式

node.js - Mongoose 在 URI 中隐藏密码

node.js - 安装 socket.io 时出错

go - 无法使命名空间在 go-socketio 中工作

javascript - 没有 jQuery 的简单 XHR 长轮询

facebook - 如何像facebook一样发出实时通知?

javascript - 快速验证器 : how to check for "+xyz" using query check?

javascript - 使用node.js解析多维人口普查数据

javascript - zombie.js 和 socket.io (node.js)

javascript - 使用 ajax/setInterval 伪造推送通知?