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

标签 javascript node.js socket.io websocket

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

如果 XHR-Polling 客户端刷新页面,他们的新连接消息似乎先于他们的断开连接消息。这会在尝试跟踪哪些用户在线时造成混淆。

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

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

最佳答案

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

这是我们在 Pusher 中添加的支持。我们使用一种叫做 Presence Channels 的东西来做到这一点.

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

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

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

因此,您系统上的用户数量最多只能达到您在服务器上运行的事件 session 数。

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

关于javascript - Socket.IO:断开连接时的 XHR 轮询延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6280569/

相关文章:

javascript - 我可以调试通过 require 加载的 node-webkit 中的模块吗?

node.js - Node.js 中的管道实现

javascript - 在 socket.io 多人棋盘游戏中避免多次移动

node.js - 套接字IO : When to use rooms and when to use namespace?

javascript - 适用于较小屏幕的汉堡菜单,包括 JavaScript/jQuery

javascript - React Router Dom v4 处理浏览器后退按钮

c - 通过套接字发送图像的最佳方法?

sockets - 使用 socket.io 授权

Javascript 和 jQuery 将 div 制作成基于选项卡的内容页面

javascript - 对于node.js、express和handlebars,我应该将前端javascript放在哪里?