我正在使用netty4来实现编码器和解码器。
当我扩展ChannelInboundHandlerAdapter类型的解码器和ChannelOutboundHandlerAdapter类型的编码器时,它的运行顺序应该是什么?
此外,ChannelOutboundHandlerAdapter和ChannelInboundHandlerAdapter如何影响读取(I / O)和写入(I / O),以及在何处使用?
答案 0 :(得分:1)
请注意以下几点:
ChannelInboundHandler
—处理入站数据和各种状态更改ChannelOutboundHandler
—处理出站数据并允许拦截所有操作
例如,当一条消息传入时(即您正在从套接字读取数据时),将通知ChannelInboundHandler。同时还会通知状态更改,例如writabilityChanged,channelActive和Inactive事件。
当您将数据写入通道时,将通知ChannelOutboundHandler。通道上的连接,断开连接和读取等呼叫也将得到通知。
要实现编码器和解码器,您可以像ByteToMessageDecoder
,MessageToMessageDecoder
,MessageToByteEncoder
和MessageToMessageEncoder
这样的网络扩展预定义的解码器和编码器,因为这样可以简化您的任务。
关于解码器和编码器的执行顺序,请这样考虑: 当消息通过套接字到达您的应用程序时,它将以字节流的形式出现,然后您必须对其进行解码以进行处理。在向外部各方发送消息时,必须先将其编码为字节,然后再将其写入套接字。编码器和解码器的执行顺序取决于此过程。