当前位置: 首页 > 知识库问答 >
问题:

在通道初始化后添加Netty处理程序:Netty 4.0.17.Final

汪翰墨
2023-03-14

我创建了一个带有channelInitializer的NettyServer,它在initChannel方法中设置管道。然后我打电话

b.bindPort(port).sync().channel().pipeline().addLast(handler).

在初始化管道之前添加处理程序,我想是因为同步只等待创建通道。

问题是,如何在管道已经初始化后将处理程序添加到管道末尾?

此外,如何确保在服务器接收任何消息之前添加最后一个处理程序?

谢谢

共有1个答案

商琛
2023-03-14

《Netty in Action》一书有以下几点:

可以在初始化器中添加多个处理程序:

    @Override
    protected void initChannel(Channel ch) throws Exception {
      ChannelPipeline pipeline = ch.pipeline();
      if (client) {
          pipeline.addLast("codec", new HttpClientCodec());
      } else {
          pipeline.addLast("codec", new HttpServerCodec());
      }
      pipeline.addLast("aggegator",
        new HttpObjectAggregator(512 * 1024));
    }

对ChannelPipeline的修改可以即时完成,这意味着您甚至可以从另一个ChannelHandler中添加/删除/替换ChannelHandler,或者让它自己删除。这允许编写灵活的逻辑,例如多路复用器

稍后添加处理程序时,可以使用handlerAdded事件存储ChannelHandlerContext供以后使用:

    @Override
    public void handlerAdded(ChannelHandlerContext ctx) {
      this.ctx = ctx;
    }

WebSocketServerProtocolHandler可能是一个寻找动态更改管道的好例子。

 类似资料:
  • 我正在尝试使用动态ChannelHandler管道实现Netty 4. X。正如人们建议的“出于性能考虑,在运行时使用调用而不是管道修改”,我实现了一个Server、一个RouterInoundHander和一个Client来测试这个理论。但它不起作用。这是我的代码 计算机网络服务器 RouterInboundHandler 和客户 如代码所示,在Channel的连接初始化阶段创建了Channel

  • 我正在学习Netty并制作一个通过TCP发送对象的简单应用程序的原型。我的问题是,当我用我的消息从服务器端调用时,它似乎没有到达管道中的处理程序。当我从客户端向服务器发送消息时,它按预期工作。 这是代码。 服务器: 双工通道处理程序: 最后是编码器(解码器类似): 客户端: 和处理程序: 当我通过服务器端的控制台发送消息时,我得到了输出: 因此,看起来似乎在客户端发送了消息,但没有收到任何消息。

  • 我试图通过“网络在行动”这本书来掌握网络概念。 在我看来,有几个概念解释得不太好或太模糊。因此,我想我会来这里就这些话题做一些明确的解释。 渠道管道: 所以我有一个这样的渠道管道: 对于channelInitializer,从概念上讲,我会假设该过程将按以下顺序进行:

  • 亲爱的史塔克弗劳尔, Swift/UIKit上的任何专家都可以在下面的屏幕截图中看到我做错了什么吗? Xcode似乎找不到基于标题、样式和处理程序的UIAlertAction的方便初始值设定项,我也不知道有任何其他方式来初始化UIAlertAction。实际上,处理器不会为零。 先谢谢你了, 杰米

  • 10.6.1.程序初始化 现在用户启动程序就会首先看到Timeline界面。但是用户必须先设置个人选项并启动Service,否则就没有消息显示。这很容易让人摸不着头脑。 一个解决方案是,在启动时检查用户的个人选项是否存在。若不存在,就跳到选项界面,并给用户一个提示,告诉她下一步该怎么做。 ... @Override protected void onCreate(Bundle savedInsta

  • 我正在使用netty构建一个应用程序。在应用程序中,我需要处理传入和传出的消息。要求是应用程序将发送的任何消息都应由特定的处理程序处理,进入应用程序的任何消息都应由另一个特定的处理程序处理。但是,我希望在两个处理程序之间交换消息,以便能够跟踪发送的消息响应,因为请求消息也将发送到应用程序。 请任何想法hwo实施这样的要求。这个问题听起来可能不相关,但这就是我得到的,我还不是一个网络极客。我读到的关