HTTP2:如何实现流控制功能?

时间:2018-12-21 08:37:59

标签: http2 flow-control

我正在研究http2的某些功能,其中之一是 Flow Control ,并且想了解我该如何实现它。如果可以,请给我一个例子或演示。 谢谢。

1 个答案:

答案 0 :(得分:0)

我在Jetty(Java HTTP和WebSocket服务器)中实现了HTTP / 2,因此,我可以向您指出如何在Jetty中实现HTTP / 2-但您可以查看实现HTTP /的其他开源项目2,看看他们是如何做到的。

Jetty实现基于类FlowControlStrategy

有两种实现方式,一种是朴素的(SimpleFlowControlStrategy),另一种是效率更高的(BufferingFlowControlStrategy)。

在两种情况下,FlowControlStrategy都从HTTP / 2实现接收事件,尤其是:

  1. 当DATA帧发送到另一个对等方时
  2. 从其他对等方收到WINDOW_UPDATE帧时
  3. 从其他对等方收到DATA帧时
  4. 应用程序使用接收到的数据时

在将数据发送到另一对等方的情况下,“发送”流控制窗口会减少;当从另一个对等方收到WINDOW_UPDATE帧时,“发送”流控制窗口将增加。

类似地,当接收到数据时,“接收”流控制窗口会减小;当应用程序使用接收到的数据时,“接收”流控制窗口会增加-可能将WINDOW_UPDATE帧发送到另一个对等点,以表示它可以发送更多数据。

HTTP / 2实现需要检查这两个流控制窗口,并在“发送”流控制窗口达到零(或负数)时停止发送数据;如果在“接收”流控制窗口为零(或负)时接收到数据,则连接失败。 收到WINDOW_UPDATE帧后,HTTP / 2实现需要恢复发送数据。

这是应如何在HTTP / 2中实现流控制的基础。根据所使用的技术和实现细节,还有很多事情需要处理,例如数据排队,数据复制,线程安全性等,但是您可以在编写实现时解决这些问题。

玩得开心!