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

标签 java apache-camel netty

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

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

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

还有,ChannelOutboundHandlerAdapter和ChannelInboundHandlerAdapter是如何实现读(I/O)和写(I/O)效果的以及应该用在什么地方?

最佳答案

注意以下几点:

ChannelInboundHandler —Processes inbound data and state changes of all kinds ChannelOutboundHandler —Processes outbound data and allows interception of all operations

例如,当收到消息时,即当您从套接字读取数据时 ChannelInboundHandler将被通知。它还会收到状态更改的通知,例如 writabilityChanged、channelActive 和 Inactive 事件。

当您将数据写入 channel 时 ChannelOutboundHandler将被通知。它还会收到有关 channel 上的连接、断开连接和读取等调用的通知。

要实现编码器和解码器,您可以在 netty 中扩展预定义的解码器和编码器,例如 ByteToMessageDecoderMessageToMessageDecoderMessageToByteEncoderMessageToMessageEncoder 因为它会简化您的任务。

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

关于java - ChannelInboundHandlerAdapter和ChannelOutboundHandlerAdapter是否影响netty4中编码器和解码器的运行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885423/

相关文章:

java - 服务器突然停止

java - 编写EnhancedUserType在Hibernate中保存类似字符串的信息,避免SQL注入(inject)

java - 如何释放 Java 端本地方法分配的内存?

java - 在多个项目中共享JAR的最佳方法是什么?

jaxb - Camel POJO 产生 JAXB 数据格式异常

java - 如何在 Camel route 使用上下文路径?

unit-testing - Camel Junit 中 XML 消息的比较

spring-boot - 如何使用 Netty 扩展 Spring react 堆

java - T extends SomeClass 的意义是什么?

java - Netty 服务器事件