Netty心跳之IdleStateHandler

2021-06-26  本文已影响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

超时异常处理方法 userEventTriggered

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

上一篇下一篇

猜你喜欢

热点阅读