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

Netty:我可以在管道和通道未来侦听器中给静态空闲状态处理程序吗

林绪
2023-03-14

在通道初始化器中,

protected void initChannel(SocketChannel ch) throws Exception {
        MessageHandler handler = new MessageHandler(channelGroup);
        ch.pipeline().addLast(DECODER, new MessageDecoder())
                .addLast(ENCODER, newMessageEncoder())
                .addLast(idleExecutor, "idleHandler", new IdleStateHandler(0, 0, 6*60))
                .addLast(pipelineExecutor, "handler", handler);
    }

在上面这段代码中,当通道初始化时,我可以使用IdleStateHandler的静态对象,而不是为每个通道使用新实例。线程安全吗?

而且

当我给一个频道写东西的时候。我向它添加了一个空闲的读取处理程序,这样如果某个时候没有得到响应,我就关闭通道。

     ChannelPipeline pipeline = channel.pipeline();
      pipeline.addAfter(ChannelInitializer.idleExecutor, 
"idleHandler", "idleReadHandler",new IdleStateHandler(60, 0, 0));

我可以在上面的代码中使用静态idleReadHandler吗?

我正在使用Netty-4.1.0

在netty 3之前,它在jboss文档中被标记为可共享。十、https://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/timeout/IdleStateHandler.html但在第四节中看不到。x文档

共有1个答案

充阳秋
2023-03-14

在netty中,确定处理程序是否可以在多个通道之间以线程安全方式使用的规则是@Shareable注释。由于IdleStateHandler未使用注释进行注释,这意味着它无法安全使用。

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

  • 无状态管道是纯粹的功能,通过输入数据流动而不记住任何东西或引起可检测的副作用。 大多数管道是无状态的。 我们使用的CurrencyPipe和我们创建的长度管是无状态管的示例。 状态管道是能够管理它们转换的数据的状态的管道。 创建HTTP请求,存储响应并显示输出的管道是有状态的管道。 有状态管道应谨慎使用。 Angular 2提供 ,这是有状态的。 View Example 实现有状态管道 // n

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

  • 我正在开发我的第一个Apache波束管道,以处理来自AWS Kinesis的数据流。我熟悉Kafka如何处理消费者偏移/状态的概念,并在实施apacheStorm/火花处理方面拥有经验。 通过留档后,我成功地使用KinesiIO创建了一个工作波束管道JavaSDK监听AWS Kinesis数据流以转换和打印消息。但是,想知道任何关于如何在apache波束w. r. t中处理以下区域的参考实现或指针

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