我在聊天系统上使用带有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:对不起我的英语不好