【问题标题】:Does ChannelInboundHandlerAdapter and ChannelOutboundHandlerAdapter effects the sequence of running encoder and decoder in netty4?ChannelInboundHandlerAdapter 和 ChannelOutboundHandlerAdapter 是否影响 netty4 中运行编码器和解码器的顺序?
【发布时间】:2018-10-19 03:19:04
【问题描述】:

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

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

  1. 先编码器,后解码器。
  2. 先解码,后编码。

还有,ChannelOutboundHandlerAdapter和ChannelInboundHandlerAdapter是如何影响读(I/O)和写(I/O)的,应该用在什么地方?

【问题讨论】:

  • 其他用户将您的问题标记为低质量和需要改进。我重新措辞/格式化您的输入,使其更易于阅读/理解。请查看我的更改以确保它们反映您的意图。如果您对我有其他问题或反馈,请随时给我留言。

标签: java apache-camel netty


【解决方案1】:

注意以下几点:

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

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

当您将数据写入通道时,ChannelOutboundHandler 会收到通知。它还会在通道上进行连接、断开连接和读取等调用时收到通知。

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

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

【讨论】:

  • 假设我已将输入作为 byte[] 提供给 ByteToMessageDecoder 它将产生消息输出。然后将它作为输入提供给编码器 MessageToByteEncoder,它将消息转换为 Byte[]。这可以是Decoder和Encoder的运行序列吗?
  • 是的,但是消息是基于上下文的。在 http 解码器中说会产生请求,而编码器将对响应进行编码。 Request 和 Response 是不同的消息类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2018-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多