netty放置编码器的正确位置

时间:2013-03-04 08:32:22

标签: netty

Netty javadoc显示编码器的典型用法如下。

解码器 - >编码器 - > (messageReceived)处理程序(写)。

现在,我想用它来编写写入的消息(好吧,我的意思是在处理程序中使用write方法处理的消息)。所以,我想找到解码器的正确方法如下..

解码器 - > (messageReceived)处理程序(写) - > Eecoder

由于Decoder返回Object,我想它可能是一个正确的消息.. 请问,如果我想在写入方法后对消息进行编码,请告诉我该怎么办?

非常感谢您的建议。

2 个答案:

答案 0 :(得分:2)

在这里查看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 *的ChannelHandlers实现了ChannelInboundHandler。 ChannelHandlers命名为Outbound实现ChannelOutboundHandler。

HandlerX实现了ChannelInboundHandler,因为它处理传入的消息事件,并通过写入通道生成传出消息事件。

当存在入站事件时(如发送到通道绑定的套接字的数据中的Netty读取)InboundHandler *按从上到下的顺序执行。

InboundHandlerA - > InboundHandlerB - > HandlerX

如果有出站事件(例如您的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。

答案 1 :(得分:0)

通常你这样说:

Encoder1,Encoder2,Decoder1,Decoder2,其他处理程序