在上一篇文章中,我们介绍了基于BDP的样本级别流量控制如何影响HTTP/2,连接和流的大小。在引入连接级别和流级别的流量控制之前,让我们看一下GRPC服务器终端的流量控制密钥:
定义如下
ControlBuffer维护一个(单链列表),该列表本质上是缓存区域。该缓存区域有两个主要功能:
在:
上一个介绍的介绍可能太抽象了。让我们一起看看实现的一些功能。
当函数是有通道时的障碍时,等待通道中的元素。在GRPC服务器的代码中,该功能出现在GRPC服务器接收客户端框架的死周期的开头。从客户端接收框架。
该函数的功能是将新框架放置在中间。同时,如果您是真实的,则需要将元素放到中间,以通知消费者从中读取框架。
该函数将从单个链接列表中的第一个位置读取。当它是空的,并且将读取方法指定为阻止读数时,该函数将等到新元素出现,也就是说,新框架出现在新框架的中间。您可以看到典型的生产者 - 消费者模型在Grpc中。
连接级别的流量控制将控制可以在特定时间发送的数据总量。
控制方法是标记当前发送的数据的数量,其中一个中间是一个。
它将初始化为65535,每当数据通过GRPC服务器发送给客户端时,它将作为数据大小降低。
当GRPC服务器从客户端接收HTTP2 FrameWindowUpdate框架时,该配额将增加。也就是说,当数据发出数据时将减少数据时,从客户端接收框架Windowupdate框架时会增加。由于与客户端的交互作用,双方应共同决定窗口的大小。
有三种流量控制状态,即
流的第一个状态是因为创建数据时尚未发送流。
当服务器接收到发送到特定流的帧时,该流将转换为活动状态。活动状态的流可以发送数据。
发送数据后,将添加相应的数据大小,表明流具有将这些数据发送给客户端,并且尚未收到响应。住宅的大小超过65535。在65535之后,数据将被拒绝发送数据的数据。此策略避免将数据连续发送给访问端,以避免浪费网络带宽,以避免响应。
在本文中,我们详细讨论了GRPC服务器端流量控制的一些方法。GRPC中的流量控制是应用层的流量控制,这与依赖ACK猜测交通控制的传统TCP不同,因为应用程序层的行为是easiermatifience和调整,因此GRPC交通控制取决于相反端的反馈信息。这种交通控制比依靠ACK的交通控制更为准确,这也是GRPC高性能的保证。