看看这里的javadoc:http: //netty.io/4.0/api/
在谈到上游和下游的地方,在 Netty4 中,这些被认为是入站和出站。文档偶尔会引用两者。
特别看例子:(我稍微改了一下)
ChannelPipeline p = ...;
p.addLast("1", new InboundHandlerA());
p.addLast("2", new InboundHandlerB());
p.addLast("3", new OutboundHandlerA());
p.addLast("4", new OutboundHandlerB());
p.addLast("5", new HandlerX());
在此示例中,名为 Inbound* 的 ChannelHandler 实现了 ChannelInboundHandler。名为 Outbound 的 ChannelHandler 实现 ChannelOutboundHandler。
HandlerX 实现 ChannelInboundHandler 因为它处理传入消息事件,并通过写入通道生成传出消息事件。
当有 Inbound 事件(如 Netty 读取发送到通道绑定的套接字的数据)时,InboundHandler* 按从上到下的顺序执行。
InboundHandlerA -> InboundHandlerB -> HandlerX
当有 Outbound 事件(比如你的 HandlerX 写入通道)时,OutboundHander* 会按从下到上的顺序执行
OutboundHandlerB -> OutboundHandlerA。
作为扩展,您可以拥有一个同时实现 Inbound 和 Outbound 的 ChannelHandler,并将在管道的执行中被调用两次。
所以在你的情况下,你想要类似的东西
ChannelPipeline p = ...;
p.addLast("DECODER", new MyMessageDecoder());
p.addLast("ENCODER", new MyMessageEncoder());
p.addLast("HANDLER", new MyHandler());
其中 MyMessageDecoder 和 MyHandler 实现 ChannelInboundHandler,而 MyMessageEncoder 实现 ChannelOutboundHandler。