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