ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter是否影响netty4中正在运行的编码器和解码器的顺序?

时间:2018-10-19 03:19:05

标签: java apache-camel netty

我正在使用netty4来实现编码器和解码器。

当我扩展ChannelInboundHandlerAdapter类型的解码器和ChannelOutboundHandlerAdapter类型的编码器时,它的运行顺序应该是什么?

  1. 首先是编码器,然后是解码器。
  2. 首先解码器,然后是编码器。

此外,ChannelOutboundHandlerAdapter和ChannelInboundHandlerAdapter如何影响读取(I / O)和写入(I / O),以及在何处使用?

1 个答案:

答案 0 :(得分:1)

请注意以下几点:

  

ChannelInboundHandler —处理入站数据和各种状态更改ChannelOutboundHandler —处理出站数据并允许拦截所有操作

例如,当一条消息传入时(即您正在从套接字读取数据时),将通知ChannelInboundHandler。同时还会通知状态更改,例如writabilityChanged,channelActive和Inactive事件。

当您将数据写入通道时,将通知ChannelOutboundHandler。通道上的连接,断开连接和读取等呼叫也将得到通知。

要实现编码器和解码器,您可以像ByteToMessageDecoderMessageToMessageDecoderMessageToByteEncoderMessageToMessageEncoder这样的网络扩展预定义的解码器和编码器,因为这样可以简化您的任务。

关于解码器和编码器的执行顺序,请这样考虑: 当消息通过套接字到达您的应用程序时,它将以字节流的形式出现,然后您必须对其进行解码以进行处理。在向外部各方发送消息时,必须先将其编码为字节,然后再将其写入套接字。编码器和解码器的执行顺序取决于此过程。