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

时间:2017-08-14 06:46:22

标签: netty

在渠道初始化程序中,

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.x之前,它在jboss docs中被标记为可共享 https://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/timeout/IdleStateHandler.html 但是请不要在4.x文档中看到

1 个答案:

答案 0 :(得分:1)

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