美文网首页
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