Netty心跳之IdleStateHandler
2021-06-26 本文已影响0人
展翅高飞鹏程万里
概述:Netty提供了对心跳机制的天然支持,心跳可以检测远程端是否在线
心跳机制的优势:
- 心跳可以检测远程端是否在线,
2.心跳可以维持客户端与服务器长连接,避免连接被防火墙,路由器关停等
IdleStateHandler介绍:
public class IdleStateHandler implements ChannelHandler {
//构造器
public IdleStateHandler(
long readerIdleTime,
long writeIdleTime,
long allIdleTime,
TimeUnit unit
)
}
构造器参数说明:
- 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()判断异常类型