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

Netty系列:表演是国王!创建一个多路重用HTTP2服务器

时间:2023-03-08 14:36:42 网络应用技术

  在上一篇文章中,我们提到在Netty客户端,通过使用HTTP2FRAMECODEC和HTTP2MultiplexHandler,它可以支持Multi -Way Reuse,也就是说,基于连接的通道创建多个子渠道,并通过连接的频道以及通过处理不同的流通过不同的流进行处理。子渠道。

  由于客户端可以实现多路重用,因此也可以使用同一服务器。今天,我将向您介绍如何创建支持Netty Server上HTTP2协议的多路重用服务器。

  HTTP2多路重复使用的基本类是HTTP2FrameCodec,HTTP2MultiplexHandler和HTTP2MultiplexCodec。

  HTTP2FrameCodec是将基础HTTP/2帧消息映射到Netty中的HTTP2Frame对象中。

  使用HTTP2Frame对象,您可以通过HTTP2MultiplexHandler打开不同创建流的不同频道。

  HTTP2MultiplexCodec是HTTP2FrameCodec和HTTP2MultiplexHandler的组合,但不再建议使用。

  由于HTTP2FrameCodec是从HTTP2ConnectionHandler继承的,因此HTTP2MultiplexHandler从HTTP2ChannelDuplexHandler继承了这两个类,因此可以同时在客户端和服务器上使用。

  客户端使用http2framecodecodecbuilder.forclient()。build()获得http2framecodec,并且服务器由http2framecodecodecbuilder.forserver()获得。建造 ()。

  对于服务器端,还需要处理TLS和普通的清晰文本。对于TLS,我们需要构建从Application Prototocolnegotiandler继承的protocolnegotiandler,然后分别实现配置方法来处理http2和http2和http1.1的连接:

  首先添加http2framecodec,然后添加http2multiplexhhandler.beafef.eafem http2multiplexhandler已封装了多路重用的详细信息,自定义处理程序只需要实现正常的消息处理逻辑即可。

  由于HTTP2FRAMECODEC已将消息转换为HTTP2Frame的对象,因此它只需要处理特定的帧对象:

  对于H2C的升级,您需要在PIPLINE中传递Sourcecodec和升级处理器。

  Sourcecodec可以直接使用HTTPSERVERCODEC。

  UpgradeHandler可以使用HTTPSERVERUPGRADEHANDLER。

  HTTPSERVERUPGRADEHADLER的构造函数需要传递到Sourcecodec和ustgradecodecodecfactory中。

  我们已经有Sourcecodec,然后构建一个升级的eCodecFactory:

  从代码可以看出,upgrdecodecfactory称为http2framecodec和http2multiplexhandler.this与使用TLS的处理器一致。

  通过上述方法,您可以创建支持多路重用的HTTP2 NetTy服务器。

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

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

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