我使用netty4来实现编码器和解码器。
当我扩展ChannelInboundHandlerAdapter类型的解码器和ChannelOutboundHandlerAdapter类型的编码器时,它的运行顺序应该是什么?
- 首先是编码器,然后是解码器。
- 首先是解码器,然后是编码器。
还有,ChannelOutboundHandlerAdapter和ChannelInboundHandlerAdapter是如何实现读(I/O)和写(I/O)效果的以及应该用在什么地方?
最佳答案
注意以下几点:
ChannelInboundHandler
—Processes inbound data and state changes of all kindsChannelOutboundHandler
—Processes outbound data and allows interception of all operations
例如,当收到消息时,即当您从套接字读取数据时 ChannelInboundHandler将被通知。它还会收到状态更改的通知,例如 writabilityChanged、channelActive 和 Inactive 事件。
当您将数据写入 channel 时 ChannelOutboundHandler将被通知。它还会收到有关 channel 上的连接、断开连接和读取等调用的通知。
要实现编码器和解码器,您可以在 netty 中扩展预定义的解码器和编码器,例如 ByteToMessageDecoder
、MessageToMessageDecoder
、MessageToByteEncoder
和 MessageToMessageEncoder
因为它会简化您的任务。
至于解码器和编码器的执行顺序可以这样想: 当消息通过套接字到达您的应用程序时,它将以字节流形式存在,然后您必须对其进行解码以进行处理。当您向外部发送消息时,您必须先将其编码为字节,然后再将其写入套接字。编码器和解码器的执行顺序取决于此过程。
关于java - ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter是否影响netty4中编码器和解码器的运行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885423/