【问题标题】:What is the replacement for ChannelHandlerContext.sendUpstream in Netty 4Netty 4 中 ChannelHandlerContext.sendUpstream 的替代品是什么
【发布时间】:2021-01-28 20:29:19
【问题描述】:

我正在努力将使用 Netty 3 的应用程序升级到 Netty 4。目前许多处理程序的代码如下所示:

public class SomeHandler extends SimpleChannelUpstreamHandler {

@Override
public void channelOpen(final ChannelHandlerContext ctx, final ChannelStateEvent e) {
     // do stuff with input
     // ....
     // then call the sendUpstream method
      ctx.sendUpstream(e);
 }

}

我正在寻找如何将其转换为 Netty 4。我看到 ChannelOutboundHandlerAdapter 现在替换了 SimpleChannelUpstreamHandler,但仍有几个问题:

  1. ChannelStateEvent 在 Netty 4 中不再可用,现在接收通道事件的机制是什么?
  2. ctx.sendUpstream(e) 在那里做什么,如何在 Netty 4 中复制?

【问题讨论】:

    标签: netty netty4


    【解决方案1】:

    在这种情况下,您将覆盖 channelActive(...) 并调用 ctx.fireChannelActive() 作为 sendUpstream(...) 的替代品

    【讨论】:

    • 我猜 channelActive 是 channelOpen 的替代品。好的。但在channelOpen中,ctx.sendUpstream(e);正在被调用...在覆盖的 channelActive 中该调用的替换是什么?
    • ctx.fireChannelActive() 或覆盖超级方法。
    • 谢谢!我感觉这部分处理事件如何在管道中的处理程序之间传播。您是否偶然知道文档中解释这一点的部分?还是有其他指南?尝试谷歌搜索,但找不到任何有用的信息
    • 我认为 netty.io/wiki/new-and-noteworthy-in-4.0.html 和 ChannelPipeline 的 javadocs。
    • 所以在一个名为channelActive 的方法中我需要调用ctx.fireChannelActive() ...第一个问题是,为什么我在处理channelActive 的方法中再次触发channelActive?这不会导致循环吗?显然这会在下一个通道处理程序中调用channelActive!我认为之前的 API(具有 ctx.sendUpstream)使管道中的下一个组件正在被激活变得更加明显。只是一个反馈
    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 2014-07-13
    • 1970-01-01
    • 2021-12-27
    • 2019-02-22
    • 2011-05-07
    • 2012-04-24
    • 2019-12-03
    相关资源
    最近更新 更多