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

wil*_*age 7 javascript websocket node.js socket.io

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

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

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

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

leg*_*ter 3

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

这是我们在Pusher中添加的支持,我们使用称为Presence Channels的东西来实现这一点。

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

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

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

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

希望这可以帮助。如果您需要澄清任何事情,请告诉我。