netty 3 から netty 4 に移行しています。従来のフィルターとして機能するパイプライン ハンドラーがあり、途中で非準拠メッセージをインターセプト/処理し、準拠メッセージを上流でシャベルします。
ドキュメント ( http://netty.io/wiki/new-and-noteworthy.html ) に基づいて、インバウンドをリレーctx.fireInboundBufferUpdated()
する代わりに使用することを期待しました。ctx.sendUpStream()
ただし、これは機能しないことがわかりましたが、ChannelHandlerUtil.addToNextInboundBuffer()
機能します。次のようなガイダンスが欲しいです。
- 現在のドキュメントの主張に対する私の混乱
ctx.sendUpstream -> ctx.fireInboundBufferUpdated
と、 - 以下で行ったことと異なる場合、この場合のベストプラクティスは何ですか。
コード:
//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
}
}