在Netty 4.1.37.Final中,如何将Http2MultiplexCodec的用法替换为Http2FrameCodec?

时间:2019-07-02 21:26:13

标签: netty

我正在从Netty 4.1.36.Final升级到4.1.37.Final。我知道我正在使用不稳定的HTTP / 2 API,并且频繁且允许从微版本到微版本的更改和弃用。我对此没有问题。

javadoc for Http2MultiplexCodec现在部分读取:

  

已弃用

     

Http2FrameCodecBuilderHttp2MultiplexHandler一起使用。

所以我着手在我的代码库中解决这个问题。

我以前在升级方案中的配方看起来像这样(myHandler可以处理HttpRequestHttpContent和HTTP / 2帧类型的消息,即很高兴使用HTTP和HTTP / 2条消息):

final HttpServerUpgradeHandler httpServerUpgradeHandler =
  new HttpServerUpgradeHandler(httpServerCodec,
                               protocol -> AsciiString.contentEquals(Http2CodecUtil.HTTP_UPGRADE_PROTOCOL_NAME, protocol) ?
                                 new Http2ServerUpgradeCodec(Http2MultiplexCodecBuilder.forServer(myHandler).build()) :
                                 null,
                               maxIncomingContentLength);

final CleartextHttp2ServerUpgradeHandler cleartextHttp2ServerUpgradeHandler = 
  new CleartextHttp2ServerUpgradeHandler(httpServerCodec,
                                         httpServerUpgradeHandler, 
                                         myHandler);

无论出于何种原因,我都无法理解应该使用的适当的不推荐使用的替代配方。

目前,我有:

final HttpServerUpgradeHandler httpServerUpgradeHandler =
  new HttpServerUpgradeHandler(httpServerCodec,
                               protocolName -> {
                                 final UpgradeCodec returnValue;
                                 if (AsciiString.contentEquals(Http2CodecUtil.HTTP_UPGRADE_PROTOCOL_NAME, protocolName)) {
                                   final Http2FrameCodec http2FrameCodec = Http2FrameCodecBuilder.forServer().build();
                                   returnValue = new Http2ServerUpgradeCodec(http2FrameCodec, myHandler);
                                 } else {
                                   returnValue = null;
                                 }
                                 return returnValue;
                               },
                               maxIncomingContentLength);

final CleartextHttp2ServerUpgradeHandler cleartextHttp2ServerUpgradeHandler =
  new CleartextHttp2ServerUpgradeHandler(httpServerCodec,
                                         httpServerUpgradeHandler,
                                         myHandler);
channelPipeline.addLast(cleartextHttp2ServerUpgradeHandler);

我注意到已经进行了升级,但是似乎没有调用myHandler

我知道我还需要在其中添加Http2MultiplexHandler,但是老实说,我不确定该在哪里添加它。我缺少明显的东西吗?

(根据Netty代码中的the Netty wiki instructions results in a NullPointerException插入Http2MultiplexHandler。)

0 个答案:

没有答案