美文网首页
Netty心跳之IdleStateHandler

Netty心跳之IdleStateHandler

作者: 展翅高飞鹏程万里 | 来源:发表于2021-06-26 16:19 被阅读0次

    概述:Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否在线

    心跳机制的优势:

    1. 心跳可以检测远程端是否在线,
      2.心跳可以维持客户端与服务器长连接,避免连接被防火墙,路由器关停等

    IdleStateHandler介绍:

    public class IdleStateHandler implements ChannelHandler {
        //构造器
        public IdleStateHandler(
            long readerIdleTime,
            long writeIdleTime,
            long allIdleTime,
            TimeUnit unit    
        )
        
    }
    

    构造器参数说明:

    1. readerIdleTime:为读超时时间
      2.writerIdleTime:为写超时时间
      3.allIdleTime:所有类型的超时时间

    使用例子:

    new ChannelInitializer<SocketChannel>() {
        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
            ChannelPipeline pipeline = ch.pipeline();
            /**
            * 配置心跳机制
            * 说明:每隔五秒检查channelRead方法,如果五秒内该方法没有被调用上则会调用
            * userEventTriggered方法。(五秒内服务器没有返回响应,可能说明服务器下线,
            * 调用userEventTriggered方法告知客户端进行处理)
            */
            pipeline.addLast(new IdleStateHeader(5,0,0,TimeUnit.SECONDS));
            //配置:发送数据加密coder
            pipeline.addLast(new RpcEncoder(new GSONSerializer()));
    
            //配置:接收数据解密coder
            pipeline.addLast(new RpcDecoder(new GSONSerializer()));
    
            //配置:业务处理Handler
            pipeline.addLast(clientHandler);
            //配置:心跳包Handler
            pipeline.addLast(new Pinger());
        }
    }
    

    IdleStateHeader超时状态说明

    IdleStateEvent
    -IdleState

    • IdleState.READER_IDLE 读超时事件类型
    • IdleState.WRITER_IDLE 写超时事件类型
    • IdleState.ALL_IDL 读或者超时事件超时类型

    超时异常处理方法 userEventTriggered

    public void userEventTriggered( ChannelHandlerContext ctx, Object evt)
    evt 此时的类型为 IdleStateEvent,可通过getState()判断异常类型

    相关文章

      网友评论

          本文标题:Netty心跳之IdleStateHandler

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