http - 将服务器发送的事件与 HTTP2 一起使用时是否仍然存在实际的 6 个连接限制?

标签 http tcp http2 server-sent-events multiplexing

我一直在谷歌上搜索,似乎找不到这个问题的直接答案,而且有些人提供了相互矛盾的答案。

大多数浏览器对每个域都有 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/

相关文章:

c - C 中带有套接字的非阻塞 connect() 问题

wireshark - 为什么 Wireshark 报告我的 HTTP/1.1 连接正在发出 HTTP/2 RESET_STREAM 命令?

javascript - 请求在浏览器缓存中匹配的各个方面是什么?

node.js - 在 Node.js/Express 中,如何为重定向禁用浏览器缓存?

c# - 在 IIS 7 中使用 net.tcp 绑定(bind)托管 WCF 服务(无法从外部访问)

c# - 在 .NET 中查找下一个 TCP 端口的线程安全方式(通过多个进程)

c# - PHP防止长请求的客户端超时

perl - 如何使用 Perl 提供 Kerberos 协商身份验证 HTTP 服务器端

node.js - HTTP2 的 Express 类型

http - 如何将 Ruby on Rails 网站从 http 1 更新到 http 2