使用 xhr 轮询时如何解决 Chrome 的 6 个连接限制
How to solve Chrome's 6 connection limit when using xhr polling
我最近发现 Chrome 似乎有 6 个连接限制 ( Chrome hangs after certain amount of data transfered - waiting for available socket ) 不幸的是我通过在加载后收到 "waiting for available sockets" 消息来艰难地发现了这一点选项卡太多 (7)。
我知道这是 Chrome 因为另一个 Chrome 用户(a.k.a 另一个浏览器会话)同时在同一台计算机上完美加载网页(我有多个Chrome 用户在我的电脑上打开)。所以它无论如何都不是服务器。
我相信这是因为,在 socket.io(我用于通知)中,我正在进行 xhr 轮询,这导致 Chrome 必须等到它可以从这些连接之一才能处理页面。
解决这个问题的方法是什么?
我想到了几个解决方案:
- 缩小 xhr-polling window,这会增加浏览器和 node.js 中的连接,但这意味着页面不会停止。
- 使用网络套接字。我不确定 websockets 是否也不受此问题的影响。
- 在未获得焦点的选项卡上使连接处于非活动状态。虽然其他网站似乎不必这样做...
- 使用某种连接共享。考虑到 Chrome 将 websockets 和 xhr 请求隔离到选项卡,我发现很难理解它是如何工作的。
补充一点:我从一开始就没有使用 websockets 的原因是因为我使用的是 cloudflare。但如果这是解决问题的方法,那就这样吧。
使用真正的 webSocket,而不是 XHR 轮询。 webSocket 连接不计入同一来源的 http 连接限制。
对于可以创建的 webSocket 连接数有一个单独的全局限制,但它是一个很高的数字(Firefox 中为 200 - 不确定 Chrome 中的确切数量)。
以下是有关此主题的一些参考资料:
我最近发现 Chrome 似乎有 6 个连接限制 ( Chrome hangs after certain amount of data transfered - waiting for available socket ) 不幸的是我通过在加载后收到 "waiting for available sockets" 消息来艰难地发现了这一点选项卡太多 (7)。
我知道这是 Chrome 因为另一个 Chrome 用户(a.k.a 另一个浏览器会话)同时在同一台计算机上完美加载网页(我有多个Chrome 用户在我的电脑上打开)。所以它无论如何都不是服务器。
我相信这是因为,在 socket.io(我用于通知)中,我正在进行 xhr 轮询,这导致 Chrome 必须等到它可以从这些连接之一才能处理页面。
解决这个问题的方法是什么?
我想到了几个解决方案:
- 缩小 xhr-polling window,这会增加浏览器和 node.js 中的连接,但这意味着页面不会停止。
- 使用网络套接字。我不确定 websockets 是否也不受此问题的影响。
- 在未获得焦点的选项卡上使连接处于非活动状态。虽然其他网站似乎不必这样做...
- 使用某种连接共享。考虑到 Chrome 将 websockets 和 xhr 请求隔离到选项卡,我发现很难理解它是如何工作的。
补充一点:我从一开始就没有使用 websockets 的原因是因为我使用的是 cloudflare。但如果这是解决问题的方法,那就这样吧。
使用真正的 webSocket,而不是 XHR 轮询。 webSocket 连接不计入同一来源的 http 连接限制。
对于可以创建的 webSocket 连接数有一个单独的全局限制,但它是一个很高的数字(Firefox 中为 200 - 不确定 Chrome 中的确切数量)。
以下是有关此主题的一些参考资料: