mike-neckのブログ

Java or Groovy or Swift or Golang

reactor-netty コールドリーディング(4)

ChannelOperationsHandler

  • reactor-netty が提供している ChannelHandler の実装クラス
  • 内部に ContextHandler を持ち、これを通じて処理の登録などを行っている模様

channelActive(ChannelHandlerContext)

  • ContextHandler#createOperations(Channel, Object) を通じて ChannelOperationsChannelAttribute に保存する
    • ChannelOperations#autoCreateOperations の値が true の場合のみだが、このフィールドのデフォルト値は true となっている
    • ChannelOperations.OnNew<Channel>ChannelOperations を生成するが、これは ContextHandler#newClientContext で渡されてくる
    • ContextHandler#newClientContext に渡す ChannelOperations.OnNew<Channel>HttpClient#doHandler に渡される BiFunction<NettyInbound,NettyOutbound, Publisher<Void>> をラップして作られる
    • HttpClientOperations#bindHttpHttpClientOperations を生成するファクトリーメソッド
    • HttpClientOperationsChannelOperations のサブクラス。 ChannelOperationsInboundHandler のラッパー NettyInboundOutboundHandler のラッパー NettyOutbound を実装したクラス
handler != null ? (ch, c, msg) -> {
    if(onSetup != null){
        onSetup.accept(ch);
    }
    return HttpClientOperations.bindHttp(ch, handler, c);
} : EMPTY);

channelRead

  • channelActive で作った ChannelOperations#onInboundNext に処理を委譲する