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

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

如果XHR轮询客户端刷新页面,则他们的新连接消息似乎在其断开连接消息之前。 当试图跟踪哪些用户在线时会造成混淆。

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

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

@davin和@jcolebrand在评论中指出,存在的主要问题是仅靠连接不能被依赖。 用户导航离开页面后,networking设备可以保持连接。 所以,你需要其他的东西来确认用户的存在。

这是我们在Pusher中添加的支持,我们使用称为Presence Channels的东西来做这件事。

我们使用一个唯一的用户标识来pipe理这个标识,这个用户标识是你(开发者)在用户连接时必须提供的,结合一个唯一的标识连接的套接字标识。 由于这个唯一的用户ID只能在一个存在成员列表中出现一次,这意味着该用户将只被列出一次 – 即使他们有多个连接打开,因此多个套接字连接。

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

一般的做法是使用会话来唯一标识用户。 就这样,即使他们只是一个“客人”,只要他们允许使用cookies,你仍然可以识别他们。

因此,系统上的用户数量最多只能在服务器上运行的活动会话数量上最大。

希望这可以帮助。 让我知道你是否想要澄清任何事情。

我正在开发一个聊天支持解决scheme,参与者必须知道客户端连接的时间。 使用websocket可以正常工作,但是在使用whr-pooling的时候,有时旁观者只是断开连接(有些情况下需要5秒钟)。 有时候不会出现。 我所做的:我只是进入页面,等待terminal的应用程序。

我正在使用nodejs,nowjs

你使用的是什么版本的socket.io? 我遇到了这个问题,并解决了这个post 。 原来在socket.io 0.9.5中引入了beforeunload事件触发时发送的请求,导致无法正常断开连接。