我在聊天系统上使用带有 xhr 轮询的 socket.io。我不想使用 websocket,因为不适用于所有用户。但是当我使用 xhr 轮询时,如果用户在浏览器上打开 5 个选项卡,消息速度会变慢。
这里同样的问题
https://github.com/LearnBoost/socket.io/issues/1145
我测试了它但没有用。仍然有 5 个连接限制。如何禁用此限制?
我在聊天系统上使用带有 xhr 轮询的 socket.io。我不想使用 websocket,因为不适用于所有用户。但是当我使用 xhr 轮询时,如果用户在浏览器上打开 5 个选项卡,消息速度会变慢。
这里同样的问题
https://github.com/LearnBoost/socket.io/issues/1145
我测试了它但没有用。仍然有 5 个连接限制。如何禁用此限制?
我很晚才遇到这个问题,但似乎您已达到浏览器的连接限制。默认情况下,浏览器对主机的连接数量有限制:一次可以打开多少个端口(例如 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;
或者你想要的任何最大值。