我正在从Netty 4.1.36.Final升级到4.1.37.Final。我知道我正在使用不稳定的HTTP / 2 API,并且频繁且允许从微版本到微版本的更改和弃用。我对此没有问题。
javadoc for Http2MultiplexCodec
现在部分读取:
已弃用
将
Http2FrameCodecBuilder
与Http2MultiplexHandler
一起使用。
所以我着手在我的代码库中解决这个问题。
我以前在升级方案中的配方看起来像这样(myHandler
可以处理HttpRequest
,HttpContent
和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
。)