Socket.IO:断开连接时的XHR轮询延迟

时间:2011-06-08 14:39:24

标签: javascript node.js socket.io websocket

我正在使用socket.io和node.js.我在跟踪哪些用户在线时遇到问题,因为套接字IO识别出XHR-Polling客户端断开连接之前几秒延迟。

如果XHR-Polling客户端刷新页面,则其新连接消息似乎在其断开连接消息之前。这在试图跟踪哪些用户在线时会引起混淆。

一种解决方案可能是检测服务器端的传输方法,并延迟XHR-Polling客户端的连接,以确保首先运行断开连接功能。

有没有人有这方面的经验?

3 个答案:

答案 0 :(得分:3)

@davin和@jcolebrand在评论中指出存在的主要问题是不能依赖连接。在用户离开页面之后,网络设备可以保持连接。因此,您需要其他一些东西来确认用户存在。

这是我们在Pusher中添加的支持,我们使用名为Presence Channels的内容进行此操作。

我们使用唯一的用户ID来管理它,您(开发人员)必须在用户连接时提供该ID,并结合标识连接的唯一套接字ID。由于此唯一用户ID只能在状态成员列表中出现一次,因此意味着该用户只会列出一次 - 即使他们打开了多个连接,因此也有多个套接字连接。

同样的想法可以应用于HTTP连接。

此方法的一般方法是使用会话来唯一标识用户。这样,即使他们只是一个“访客”,只要他们允许使用cookie,你仍然可以识别它们。

因此,系统上的用户数量应该只能达到您在服务器上运行的活动会话数量。

希望这会有所帮助。如果你想澄清任何事情,请告诉我。

答案 1 :(得分:1)

我正在开发一个聊天支持解决方案,并且相关人员必须知道客户端何时连接。随着websocket工作正常,但随着whr-pooling,有时候只是断开连接(在某些情况下为5秒)。有时候不要说道。我的所作所为:我只是进入页面并等待查看终端应用程序。

我正在使用nodejs,nowjs

答案 2 :(得分:1)

您使用的是什么版本的socket.io?我遇到了这个问题并解决了它 on this post。事实证明,在触发beforeunload事件时发送的请求中,socket.io 0.9.5中引入了一个错误,阻止了正确的断开连接。