增加 Netty 框架的心跳机制,防止网络波动情况下异常的问题
pipeline.addLast(new IdleStateHandler(0,
0,2, TimeUnit.MINUTES));
处理:
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
super.userEventTriggered(ctx, evt);
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
if (event.state().equals(IdleState.READER_IDLE)) {
Logger.i(TAG, "userEventTriggered READER_IDLE 读超时,长期没收到服务器推送数据!Channel is active:" + mChannelFuture.channel().isActive());
//可以选择重新连接
} else if (event.state().equals(IdleState.WRITER_IDLE)) {
Logger.i(TAG, "userEventTriggered WRITER_IDLE 写超时,长期未向服务器发送数据!Channel is active:" + mChannelFuture.channel().isActive());
//发送心跳包
ctx.writeAndFlush(HEART_BEAT_STRING);
} else if (event.state().equals(IdleState.ALL_IDLE)) {
Logger.i(TAG, "userEventTriggered ALL 没有接收或发送数据一段时间");
//发送心跳包
ctx.writeAndFlush(HEART_BEAT_STRING);
}
}
}