Netty IdleStateHandler自3.5.9.Final(3.x)起未触发IdleStateEvent

Netty IdleStateHandler自3.5.9.Final(3.x)起未触发IdleStateEvent,netty,Netty,我正在尝试在空闲超时之后,使用IdleStateHandler关闭来自netty服务器的空闲连接,类似于。 有些人认为这对我不起作用。调试了该问题并发现计时器实际上触发了“IdleStateEvent”事件,一旦超时,在将其添加到队列“AbstractNioSelector.taskQueue”后,它就会从“IdleStateHandler.fireChannelIdle”方法中丢失。它是在3.5.9.Final中引入的,但是如果我使用netty 3.5.8.Final版本,它就可以正常工作 我

我正在尝试在空闲超时之后,使用IdleStateHandler关闭来自netty服务器的空闲连接,类似于。 有些人认为这对我不起作用。调试了该问题并发现计时器实际上触发了“IdleStateEvent”事件,一旦超时,在将其添加到队列“AbstractNioSelector.taskQueue”后,它就会从“IdleStateHandler.fireChannelIdle”方法中丢失。它是在3.5.9.Final中引入的,但是如果我使用netty 3.5.8.Final版本,它就可以正常工作

我现在使用的是netty 3.9.x版本,使用的是3.9.4.Final

受影响的版本:3.5.9.Final到3.9.5.Final

如何复制这个。 如果我使用netty 3.5.8.Final,下面的代码会在1分钟后关闭空闲连接,但任何更高版本的3.x库都无法做到这一点

public class PipelineFactory implements ChannelPipelineFactory {
  ...
  public PipelineFactory(Timer timer) {
    this.timer = timer;
    this.chHandler = new EchoServerHandler();
  }

  @Override
  public ChannelPipeline getPipeline() throws Exception {
   final ChannelPipeline pipeline = Channels.pipeline(new IdleStateHandler(this.timer, 0, 0, 60),
           new MyIdleStateAwareHandler());
    pipeline.addLast("handler", chHandler);
    return pipeline;
  }
}

class MyIdleStateAwareHandler extends IdleStateAwareChannelHandler {
  ...
  @Override
  public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) {
    if (e.getState() == IdleState.ALL_IDLE) {
      logger.info("Closed idle socket.");
      e.getChannel().close();
    }
  }
}

class EchoServerHandler extends SimpleChannelHandler {
  ...
  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    try {
      Thread.sleep(600000);
    }
    catch(InterruptedException iex) {
      logger.error("interrupted " + iex.getMessage());
    }

    ChannelBuffer buffer = (ChannelBuffer) e.getMessage();
    while(buffer.readable()) {
      System.out.print((char) buffer.readByte());
      System.out.flush();
    }
  }
}

非常感谢您为解决此问题提供的帮助或建议。

请在问题跟踪器上打开错误报告。谢谢