使用 HTTP/2 时可以打开多个 SSE 通道吗?

Can I have multiple open SSE channels when using HTTP/2?

到目前为止我只用了HTTP/1.1,但最近我换成了HTTP/2。在 1.1 上,我 运行 遇到了请求数量限制问题,但是 HTTP/2 使用一个连接与多路复用,这是否意味着我可以毫无问题地保持多个 SSE 通道打开,或者我仍然应该只使用一个与一些内部消息路由解决方案?

如果您想安全起见:只使用一个通道或其中的几个通道并在内部进行多路复用。

更长的答案:更多通道导致 HTTP/1.1 出现问题的原因是每个通道都需要一个专用的 TCP 连接,并且浏览器限制了每个选项卡的并发 TCP 连接数(我认为大约 10)。使用 HTTP/2 可以在单个连接上进行并发 HTTP 请求。因此更有可能打开多个并发 SSE 流。然而,浏览器(以及网络服务器)可能仍会限制它们通过 TCP 连接支持的并发 HTTP/2 流的数量。 HTTP/2 甚至通过允许 HTTP/2 设置中的每个对等点通信其支持的最大并发流数 (SETTINGS_MAX_CONCURRENT_STREAMS) 来支持这一点。为了安全起见,您需要弄清楚您的目标浏览器和 Web 服务器支持的限制是什么,并使用较少数量的 SSE 流。不幸的是,我不知道它是否是任何 HTML 或浏览器规范的一部分,它们都应该至少支持超过 HTTP/2 的明确指定数量的并发请求。如果您将请求数量保持在较低水平,则可以避免 运行 出现问题。

仅使用几个渠道的另一个优势是您仍然可以很好地支持 HTTP/1.1 客户端。不仅是那些可能直接连接到您的服务器的那些,还有那些可能通过代理服务器连接的(这意味着连接浏览器<->代理使用 HTTP/1.1 和代理<->网络服务器使用 HTTP/2).