当前位置: 首页 > 网络应用技术

Netty系列:Netty在HTTP2中实现流控制

时间:2023-03-07 22:22:41 网络应用技术

  与HTTP1.1相比,HTTP2的重要改进是流程控制。为什么有流量控制?这是因为无论哪种协议,客户端和服务器端都具有在接收数据时无法暂时处理的缓冲数据,但是缓冲区的大小受到限制,因此可能存在一个缓冲区。溢出(例如在服务器端上传大图)可能会导致服务器端的缓冲区溢出,这会导致一些其他数据包丢失。

  为了避免缓冲区溢出,每个HTTP协议都提供了一定的解决方案。

  在HTTP1.1中,流量的控制取决于基础TCP协议。当客户端和服务器设置连接时,系统的默认设置将用于建立缓冲区。传达数据后,它将告诉另一方的接收窗口大小。此接收窗口是缓冲区中剩余的可用空间。如果接收窗口的大小为零,则表示接收器的缓冲区已满,并且发件人将不再发送数据,直到客户端清除其内部缓冲区,然后请求恢复数据传输。

  HTTP2通过客户端和服务器应用程序传输缓冲区的大小,并在应用程序级别控制数据流。因此,各种应用程序可以自己控制流量的大小,以实现更高的连接效率。

  本文将介绍Netty对HTTP2流控制的支持。

  在引言中,我们还提到了传统的HTTP1.1使用系统底层的流控制机理,该机理特别是TCP的流量控制。多路重用机制,TCP连接可以具有多个HTTP2连接。因此,对于HTTP2,TCP本身的流量控制机制太粗糙且不够细。

  因此,在HTTP2中,实现了更精细的流控制机制,该机制允许客户和服务器实现自己的数据流和连接流控制。

  特定过程就是这样。当客户端和服务器设置连接时,将发送HTTP2SetTingsFrame。此设置框架包含settings_initial_window_size.Flow控制窗口的默认值设置为65,535字节,但是接收器可以以2^31-1字节的最大值对其进行修改。

  在建立初始窗口侧后,对于接收器,每个发件人都会发送数据框以减少窗口的大小。每次接收器发送window_update框架时,窗口的大小都会增加。从实现动态控制的目的,动态控制意志的目的

  从上面的引言中,我们知道HTTP2是通过两个方面实现的。第一个方面是初始化的http2settingsframe。它通过设置设置来控制初始窗口的大小。

  对于Netty,所有这些都封装在HTTP2FlowController class.http2flowcontroller中是一个抽象类,它具有两个实现,即HTTP2LocalflowController和Http2rmoteflowController。分别表达了数据和外部数据流量的内组合流量的处理。

  HTTP2FlowController中有五种方法,它们是::

  接下来,让我们看一下他的两个实施课程,什么是不同的地方。

  LocalFlowController用于从远程节点发送的数据帧进行流控制。它有5种主要方法。

  远程FlowController用于处理发送到远程节点的外站数据帧。它提供了8种方法:

  flowControl相关类主要用于HTTP2 Connection,HTTP2 ConnectionDecoder,HTTP2ConnectionCoder,并在建立HTTP2连接中起着相应的作用。

  FlowControl是HTTP2中相对较低的概念。在对Netty的HTTP2实现的深度理解中,每个人都应遇到每个人。

  最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!

  欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!