HTTP/2利用流来实现多路复用,这引入了对TCP连接的使用争夺,会造成流被阻塞。流量控制方案确保在同一连接上的多个流之间不会造成破坏性的干扰。流量控制会用于各个独立的流,也会用于整个连接。
HTTP/2通过使用WINDOW_UPDATE帧来进行流量控制。
HTTP/2“流”的流量控制的目标是:在不改变协议的情况下允许使用多种流量控制算法。HTTP/2的流量控制具有以下特征:
具体实现也负责:
为这些选择的算法可以与任何流量控制算法交互。
流量控制的目的是保护在资源约束下运转的端点。例如,一个代理需要在许多个连接之间共享内存,并且,可能有缓慢的上游连接和快速的下游连接。流量控制解决了接收方不能处理一个流的数据,但是希望能够继续处理同一连接上其它流的数据的问题。
不需要这种能力的部署可以通告一个最大尺寸(2^31-1)的流量控制窗口,并且,当收到任何数据时,都可以通过发送WINDOW_UPDATE帧来维持这个窗口。这有效禁用了接收方的流量控制。反之,发送方必须一直遵守接收方通告的流量控制窗口。
资源(例如内存)有限的部署可以引入流量控制来限制内存消耗量。然而,如果在不知道带宽延迟乘积的情况下启用流量控制,可能无法最大化利用可用的网络资源。
即使是对当前的带宽延迟乘积有充分的了解,流量控制的实现也可能非常困难。当使用流量控制的时候,接收方必须及时地从TCP接收缓冲中读取数据。如果不这样做,当类似WINDOW_UPDATE的关键帧没有被读取和使用时,可能会导致死锁。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/jianfyun/article/details/48049631