Netty javadoc显示编码器的典型用法如下。
解码器 - >编码器 - > (messageReceived)处理程序(写)。
现在,我想用它来编写写入的消息(好吧,我的意思是在处理程序中使用write方法处理的消息)。所以,我想找到解码器的正确方法如下..
解码器 - > (messageReceived)处理程序(写) - > Eecoder
由于Decoder返回Object,我想它可能是一个正确的消息.. 请问,如果我想在写入方法后对消息进行编码,请告诉我该怎么办?
非常感谢您的建议。
答案 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,其他处理程序