0

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

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

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

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

由于解码器返回对象,我想知道它可能是一个正确的消息。如果我想在 write 方法之后对消息进行编码,请问我应该怎么做?

非常感谢您的建议。

4

2 回答 2

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* 的 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。

于 2013-03-06T04:14:26.227 回答
0

通常你是这样写的:

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

于 2013-03-04T19:55:02.820 回答