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

Netty系列:在HTTP2中使用Framecodec

时间:2023-03-06 21:18:21 网络应用技术

  Netty为我们提供了许多HTTP2包装,使我们能够轻松构建支持HTTP2的服务器。唯一需要我们自定义的东西是HTTP2处理程序。

  在上一篇文章中,我们介绍了从HTTP2ConnectionHandler继承并实现的HTTP2FrameListener的自定义HTTP2HANDLER。此实现方法是一种更推荐的Netty实现方法。今天介绍的一种实现方法是,在Netty中取代HTTP2ConnectionHandler的实现,但是这种实现方法不成熟并且正在不断改进。

  今天,我将介绍这种实施方法。

  该实现方法的核心类别是http2framecodec。

  它的主要作用是http/2.http2frame中的映射框架和http2frame对象,是一个与Netty中的所有HTTP2帧相对应的软件包,因此您可以专注于处理后续处理程序中的http2frer对象,以便摆脱删除详细信息的详细信息。HTTP2协议,可以减少用户的工作负载。

  对于输入的每个HTTP/2帧,HTTP2FRAMECODEC都会创建一个HTTP2Frame对象,并将其传递给ChannelRead方法以处理对象。

  通过调用写入方法,您可以为HTTP2Frame的HTTP2Frame转换HTTP2帧的格式。

  Netty中有三个非常相似的类,它们是http2frame,http2framestream和http2streamframe。

  我们知道Netty中的TCP连接可以构建多个流。http2framestream是与流相对应的类。此类包含流的ID和流的当前状态。

  流包含多个消息,每个消息由多个帧组成,因此HTTP2Frame是与这些帧相对应的Netty类。

  HTTP2StreamFrame本身也是一个帧,实际上它继承了HTTP2Frame。

  为什么会有这个类?因为通常与帧本身相对应,它与特定的流相关联。HTTP2StreamFrame指示此关系可以通过其SET流方法指定其关联流的流。如果您希望将帧应用于整个连接而不是特定的流,如果它与整个连接关联,则应应用于整个连接,则流()方法为null。

  尽管HTTP2FrameCodec具有构造函数,但Netty建议使用HTTP2FrameCodeCbuilder构造它:

  您可以看到http2framecocdecbuileder有一个前夫和一种迫害方法。其中一种是在服务器上使用的,另一个是在客户端上。

  它主要由内部服务器属性区分。

  Frame编解码器会将框架发送到有效的流。

  对于有效的流,如果任何一方发送RST_STREAM框架,则该流将关闭。

  或带有END_STRAM标记的任何框架的发件人或接收器,将关闭。

  HTTP2FRAMECODEC提供了对流的自动控制,但是我们仍然需要执行一些操作以更新窗口。

  具体来说,当我们收到HTTP2DATAFRAME消息时,处理消息后,我们需要增加窗口的大小,表明数据已被处理,并且可以有更多的空间来容纳新数据。

  换句话说,您需要在CTX中编写http2windowupdateframe。在此http2windowupdateframe中,数据的大小和数据的相应流ID。以下是处理数据框架的示例:

  在上面的示例中,我们将相应的流ID传递给Defaulthttp2windowupdateframe。如果流ID为0,则表示整个连接是处理的,而不是单独的流。

  除了窗口更新框架外,对于特定流的初始窗口,您还可以发送HTTP2SetTingsFrame,并通过设置http2settings.initialwindowsize()来设置初始化的目的。

  对于每个HTTP/2流,它包含的框架可以分为HTTP2HeadersFrame和http2dataframe,并且HTTP2HeadersFrame必须是第一个接收的帧,并且此标头帧还将相应的流对象关联。

  因此,我们可以在处理以下两个不同的帧:

  如果您使用http2framecodec,我们只需要在添加自定义处理程序之前将http2framecodec添加到PIPLINE中:

  由于HTTP2FrameCodec已更改了HTTP2中的帧,因此我们只需要在Custhttp2handler中处理自定义逻辑。

  Netty建议自定义处理程序从HTTP2ChannelDuplexHandler继承,因为它比普通的Channelduplexhandler拥有一个更多的newsTream()并遍历了所有有效的ForeachIctiveStream(HTTP2FrameStreamvisitor)。

  本文解释了HTTP2FrameCodec的原则,并与处理程序实施有关。

  本文的示例可以参考:Learn-netty4

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

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

最新推荐
猜你喜欢