В Netty 4.1.37.Final, как я могу заменить использование Http2MultiplexCodec на Http2FrameCodec? - PullRequest
0 голосов
/ 03 июля 2019

Я обновляюсь с Netty 4.1.36.Final до 4.1.37.Final.Мне известно, что я работаю с нестабильными API-интерфейсами HTTP / 2 и что изменения и устаревания с микро-версии на микро-версию являются частыми и разрешенными.У меня нет проблем с этим.

Javadoc для 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, но я, честно говоря, не уверен, где на земле его добавить.Я что-то упускаю из виду?

(вставка Http2MultiplexHandler в соответствии с инструкциями Netty вики приводит к NullPointerException в коде Netty.)

...