我一直在谷歌上搜索,似乎找不到这个问题的直接答案,而且有些人提供了相互矛盾的答案。
大多数浏览器对每个域都有 6 个连接限制。因此,例如,如果您的网站是 example.com 并且它在页面加载时初始化持久服务器发送事件连接,那么最终用户可以再打开该选项卡五次,但第六个选项卡根本不会加载,因为 6已为该域达到持久 TCP 连接。
现在,我看到有人说这只是 SSE 的一个长期问题,唯一的替代方法是涉及检测此连接限制然后关闭隐藏选项卡中的连接或关闭这些选项卡中的那些连接并切换的 hacky 解决方法到长轮询。
然而,一些人声称 HTTP2 通过多路复用解决了这个问题,这样您就可以打开该网站的任意多个选项卡,因为所有选项卡都多路复用到同一个 TCP 连接上.我找不到这一说法的主要来源,也找不到任何具有重大权威的人。
那么,这是真的吗? HTTP2多路复用是否解决了网站域名常见的6个连接限制问题?或者,如果他们想要支持网站的许多打开选项卡,是否基本上需要改用 websockets?
最佳答案
我在 Jetty 中实现了 HTTP/2 .
如 this answer 中所述,使用 HTTP/2,浏览器可以向服务器发出的最大并发请求数大大增加——不是无限的,而是从 6-8 增加到大约 100。
是的,多路复用在实践中解决了这个问题(除非您打开超过 100 个左右的标签)。
请注意,此值是由服务器配置的,因此服务器可能向客户端发送的配置将最大并发请求数设置为一个较小的数字,但实际上服务器已经确定了一个大约 100 的数字。
话虽如此,你还想阅读 this other answer有关 SSE 与 WebSocket 的讨论。
关于http - 将服务器发送的事件与 HTTP2 一起使用时是否仍然存在实际的 6 个连接限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163596/