如何在 socket.io 上禁用五个连接限制



我正在聊天系统上使用带有xhr轮询的 socket.io。我不想使用 websocket,因为不适用于所有用户。但是当我使用 xhr 轮询时,如果用户在浏览器上打开 5 个选项卡,消息会变慢。

同样的问题在这里

https://github.com/LearnBoost/socket.io/issues/1145

我测试了它但没有工作。仍然有 5 个连接限制。如何禁用此限制?

我很晚才遇到这个问题,但似乎您已达到浏览器的连接限制。默认情况下,浏览器对一次可以打开多少个与host:port的连接有限制(例如

Chrome允许8个)

因此,对于您的 socket.io 情况,当您打开同一域的 5 个选项卡时,这意味着您使用了浏览器允许的 5 个连接。对于普通网站,这不是问题,因为您请求并收到响应,然后连接关闭。但对于 socket.io(和相关库),连接始终保持打开状态以接收"服务器推送"数据。我可能是错的,但至少这是我项目的问题(我不使用 Socket.IO 而是使用类似的库)

解决方案是限制应用程序中 socket.io 连接的数量,以便始终只有 1 个连接。其余的通信应通过交叉表(跨窗口)事件(例如通过 LocalStorage)完成。结果是,您有 1 个选项卡(窗口)保存真实的 socket.io 连接并将事件(从 socket.io 接收)广播到其他选项卡(窗口)。当然,在实际实现它时,您还需要考虑许多其他因素。

P/s:很抱歉我的英语不好

您自己提供了解决方案 - 您链接的错误票证最后有指向解决方案的链接,这基本上是添加以下内容:

var http = require('http');
http.globalAgent.maxSockets = 100;
http.Agent.maxSockets = 100;

或者您想要的任何最大值。

最新更新