我正在研究http2的某些功能,其中之一是 Flow Control ,并且想了解我该如何实现它。如果可以,请给我一个例子或演示。 谢谢。
答案 0 :(得分:0)
我在Jetty(Java HTTP和WebSocket服务器)中实现了HTTP / 2,因此,我可以向您指出如何在Jetty中实现HTTP / 2-但您可以查看实现HTTP /的其他开源项目2,看看他们是如何做到的。
Jetty实现基于类FlowControlStrategy。
有两种实现方式,一种是朴素的(SimpleFlowControlStrategy),另一种是效率更高的(BufferingFlowControlStrategy)。
在两种情况下,FlowControlStrategy都从HTTP / 2实现接收事件,尤其是:
在将数据发送到另一对等方的情况下,“发送”流控制窗口会减少;当从另一个对等方收到WINDOW_UPDATE帧时,“发送”流控制窗口将增加。
类似地,当接收到数据时,“接收”流控制窗口会减小;当应用程序使用接收到的数据时,“接收”流控制窗口会增加-可能将WINDOW_UPDATE帧发送到另一个对等点,以表示它可以发送更多数据。HTTP / 2实现需要检查这两个流控制窗口,并在“发送”流控制窗口达到零(或负数)时停止发送数据;如果在“接收”流控制窗口为零(或负)时接收到数据,则连接失败。 收到WINDOW_UPDATE帧后,HTTP / 2实现需要恢复发送数据。
这是应如何在HTTP / 2中实现流控制的基础。根据所使用的技术和实现细节,还有很多事情需要处理,例如数据排队,数据复制,线程安全性等,但是您可以在编写实现时解决这些问题。
玩得开心!