1

netty 3 から netty 4 に移行しています。従来のフィルターとして機能するパイプライン ハンドラーがあり、途中で非準拠メッセージをインターセプト/処理し、準拠メッセージを上流でシャベルします。

ドキュメント ( http://netty.io/wiki/new-and-noteworthy.html ) に基づいて、インバウンドをリレーctx.fireInboundBufferUpdated()する代わりに使用することを期待しました。ctx.sendUpStream()ただし、これは機能しないことがわかりましたが、ChannelHandlerUtil.addToNextInboundBuffer()機能します。次のようなガイダンスが欲しいです。

  1. 現在のドキュメントの主張に対する私の混乱ctx.sendUpstream -> ctx.fireInboundBufferUpdatedと、
  2. 以下で行ったことと異なる場合、この場合のベストプラクティスは何ですか。

コード:

//The pipeline

public class ServerInitializer extends ChannelInitializer<SocketChannel> {

 @Override
 public void initChannel(SocketChannel ch) throws Exception {
     ChannelPipeline p = ch.pipeline();
     p.addLast("decoder", new HttpRequestDecoder());
     p.addLast("encoder", new HttpResponseEncoder());
     p.addLast("inbound", InboundHttpRequestFilter.INSTANCE);
     p.addLast("handler", handlerClass.newInstance());

 }
}

//The filter
public class InboundHttpRequestFilter extends
        ChannelInboundMessageHandlerAdapter<Object> {

    @Override
    public void messageReceived(ChannelHandlerContext ctx, Object msg)
            throws Exception {
        ... discard/handle as necessary …;
        //ctx.fireInboundBufferUpdated(); - doesn't propagate upstream
        ChannelHandlerUtil.addToNextInboundBuffer(ctx, msg); // sends upstream
    }
}
4

1 に答える 1