node.js - 为什么我的 socket.io 使用长轮询而不是 websocket?

标签 node.js socket.io

所以我用 NodeJS + ExpressJS 服务器设置了 socket.io,一切都运行良好。唯一的问题是我刚刚意识到我的 emit() 调用正在使用后备 XHR 方法将事件发送到我的服务器,而不是它打开的 websocket 连接。

当我查看连接时,我看到的只是一些 2probe3probe,然后是通过 websocket 发送的一堆 2 和 3。此连接似乎已打开且正常工作,那么为什么它会退回到使用 XHR 请求进行长轮询?

我现在不提供任何代码,因为我不确定哪个部分是相关的,因为代码的功能方面运行良好,我只想通过 XHR 使用 websocket。有什么想看的代码告诉我

更新

所以我对套接字进行了更多测试,并添加了更多 emit() 调用。似乎最初的 1 或 2 个发射使用长轮询,然后突然切换到使用 websocket。只是好奇这里发生了什么。

最佳答案

从 Socket.IO 1.x 开始,回退算法从降级方法变为升级方法。

长轮询几乎在任何地方都有效,所以一开始就使用它,这样您就可以立即获得“连接”。然后在后台尝试将长轮询连接升级为 websocket 连接。如果升级成功,长轮询停止, session 切换到 websocket 连接。如果不成功,长轮询“连接”保持打开状态并继续使用。

关于node.js - 为什么我的 socket.io 使用长轮询而不是 websocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31282578/

相关文章:

jquery - 从服务器推送更新

node.js - 使用 cloudinary npm 模块上传图像

node.js - 我如何知道我的 socket.io 连接延迟了多长时间?

javascript - 在 Node.js 和 Delphi 应用程序之间交换消息

php - Node.js , Socket.io 从子域访问 cookie 数据

使用 .split() 和 .include( 的 SQL 查询

node.js - Alamofire图像代码=-1016 "Failed to validate response due to unacceptable content type"

javascript - Socket.io 从一个事件发出多条消息

node.js - 将前端 native websocket 客户端连接到 Node.js Socket.io 服务器

node.js - Mongoose 具有正则表达式和限制的不同查询?