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

Netty系列:使用Netty实现支持HTTP2的服务器

时间:2023-03-07 15:42:13 网络应用技术

  在上一篇文章中,我们提到了如何配置Netty中的TLS以让他支持HTTP22。为Netty支持HTTP2?让我们一起看一下。

  Netty支持两种HTTP2病例。第一种情况是使用TLS。在这种情况下,您需要添加一个协议Negotiandler来协商握手之后的协议。协商后,您需要确定要使用的协议。

  在上一篇文章中,我们介绍了支持HTTP2的TLS的详细信息。我不会在这里详细介绍。有兴趣的朋友可以查看我的上一篇文章。

  如果您不使用TLS,则有两种情况,一种是直接使用HTTP1.1。我们需要将ChannelInboundHandler添加到HTTP1.1。

  另一种情况是使用清晰文本从HTTP1.1升级到HTTP2。

  http/2 clearText也称为H2C。我们查看一个简单的升级请求。首先,客户请求:

  然后是服务器端的响应。如果服务器不支持升级,则返回:

  如果服务器支持升级,请返回:

  在上面的基本过程中,我们只需要提供Netty中相应的处理程序类即可解决HTTP2的支持。

  但是,上面的升级过程看起来很复杂,因此Netty为我们提供了一个封装的类:clearTextTp2ServerupGradeGradeHandler来实现H2C函数。

  此类需要传递到3个参数,即HTTPSERVERCODEC,HTTPSERVERUPGRADEHADLER和CHANNELHANDLER。

  HTTPSERVERCODEC是处理HTTP服务器的编码类。通常,我们使用httpservercodec。

  HTTPSERVERUPGRADEHADLER是一个处理类,可将HTTP1.1升级到HTTP2。

  Netty还提供了Ready -MAD -MADE类:Httpserverupgradehandler来处理升级的编码。

  httpserverupgradehadler需要两个参数,一个是sourcecodec,即HTTP的原始编码的编码httpservercodec,一个是一个出厂类,用于返回ustgradecodec并返回HTTTP2ServerupGradeCodec,与NetTy一起返回。

  ChannelHandler是一个真正处理HTTP2的处理程序,我们可以根据需要自定义此处理程序。

  使用UpgradeHandler,只需将其添加到ChannelPipeLine。

  无论是HTTPSERVERUPGRADEHADLER,还是ClearTextTP2ServerupGradeHandler,他们都需要通过一个可以真正处理http2的处理程序。该处理程序是http2connectionler。

  HTTP2 ConnectionHandler是一个实现类别,已实现了处理各种入站框架事件的事件,然后将这些事件委托给HTTP2FrameListener。

  因此,HTTP2 ConnectionHandler需要与HTTP2Framelistener一起使用。

  这是HTTP2FrameListener的详细说明,该说明主要处理HTTP2帧的各种事件。

  让我们看一下http2framelistener中提供的事件触发方法:

  从上图可以看出,它主要是各种帧事件的触发方法。其中,http2中有几帧:

  这些框架基本上列出了HTTP2帧中的所有类型。

  我们要做的是自定义处理程序类,继承HTTP2ConnectionHandler,然后实现HTTP2FrameListener接口。

  在用清晰的文本从HTTP1.1升级到HTTP2的过程中,我们需要处理两件事。第一件事是处理HTTP1.1使用HTTP标头升级到HTTP2。您可以通过判断该事件的类型来判断,从而将使用HTTP2 ConnectionHandler重写来判断,以升级为启用该方法在相应的HTTP2FrameListener界面中,例如onheadersRead,例如此处:此处:此处:此处:此处:此处:此处::

  UPGRADETOHTTTP2HEADERS方法将将FullHttpRequest的输入转换为HTTP2Headers:

  要实现的另一种方法是sendResponse方法。数据写回客户端,写作需要包括两个部分:标题和数据,如下所示:

  此时,完成了从HTTP1.1到HTTP2的处理程序处理清晰的文本。与前面解释的TLS扩展协议的支持结合,它构成了支持HTTP2的完整Netty服务器。

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

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

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