如何处理反向代理和应用服务器之间重新建立的连接?

问题描述 投票:0回答:1

我们正在将服务从Websocket迁移到HTTP / 2。但是,我们发现当流ID超出可用范围时必须重新建立连接。由于我们维护了反向代理与实际应用服务器之间的连接,因此它们之间的HTTP / 2连接将每天重新建立几次,并且服务器启动的事件可能会丢失。

所以,我的问题是我们如何优雅地重建服务器之间的连接?

http2
1个回答
0
投票

HTTP / 2流ID是31位长,这意味着您可以拥有2 ^ 32 - 1个流ID,其中奇数用于客户端启动,甚至是服务器启动。这是在流ID耗尽之前可以发送的2,147,483,647条消息。

您是否真的每天多次发送超过20亿条(美国而不是英国数十亿条消息),这意味着您达到了这个限制?如果是这样,我不确定HTTP是否是最适合您的协议,您可能最好坚持使用Web套接字。 HTTP增加了HTTP标头的开销,这意味着它对于小的频繁消息不是最佳的。

无论如何回答你的问题,the HTTP/2 spec有以下说法:

流标识符无法重用。长期连接可能导致端点耗尽可用的流标识符范围。无法建立新流标识符的客户端可以为新流建立新连接。无法建立新流标识符的服务器可以发送GOAWAY帧,以便强制客户端为新流打开新连接。

因此,基本上您必须对客户端和服务器进行编码以处理此问题,并且客户端应该在无法增加流ID时自动启动新流。这并不是说它应该拆除旧的连接,直到所有的飞行消息都得到回答 - 在一段时间内可能有两个连接正在进行中。如果这是不可能的,那么我建议客户端或服务器在限制接近时主动关闭连接,并且新消息排队直到连接关闭然后建立新消息。

© www.soinside.com 2019 - 2024. All rights reserved.