在上一篇文章中,我们提到在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
最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!
欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!