美文网首页
Netty之空闲状态处理器 - IdleStateHandler

Netty之空闲状态处理器 - IdleStateHandler

作者: engineer_tang | 来源:发表于2023-08-22 16:05 被阅读0次

当通道有一段时间没有执行读取、写入或同时执行这两种操作时,触发IdleStateEvent。

各参数含义:
readerIdleTime
当在指定的时间段内没有执行读取时,将触发IdleStateEvent 事件其状态为IdleState.READER_IDLE 。指定0以禁用。

writerIdleTime
当在指定的时间段内没有执行写入时,将触发IdleStateEvent 事件其状态为IdleState.WRITER_IDLE。指定0以禁用。

allIdleTime
当在指定的时间段内既没有执行读取也没有执行写入时,将触发IdleStateEvent 事件其状态为 IdleState.ALL_IDLE。指定0以禁用。

1. 例子

超过30秒没有往通道写入消息的时候,发送ping命令。超过60秒没有从通道读取到消息时,直接关闭通道。

 
  public class MyChannelInitializer extends ChannelInitializer<Channel> {
      @Override
      public void initChannel(Channel channel) {
          channel.pipeline().addLast("idleStateHandler", new IdleStateHandler(60, 30, 0));
          channel.pipeline().addLast("myHandler", new MyHandler());
      }
  }
 
  // Handler should handle the IdleStateEvent triggered by IdleStateHandler.
  public class MyHandler extends ChannelDuplexHandler {
      @Override
      public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
          if (evt instanceof IdleStateEvent) {
              IdleStateEvent e = (IdleStateEvent) evt;
              if (e.state() == IdleState.READER_IDLE) {
                  ctx.close();
              } else if (e.state() == IdleState.WRITER_IDLE) {
                  ctx.writeAndFlush(new PingMessage());
              }
          }
      }
  }
 
  ServerBootstrap bootstrap = ...;
  ...
  bootstrap.childHandler(new MyChannelInitializer());
  ...

相关文章

网友评论

      本文标题:Netty之空闲状态处理器 - IdleStateHandler

      本文链接:https://www.haomeiwen.com/subject/pijumdtx.html