增加 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);
}
}
}
文章介绍了如何在Netty中添加IdleStateHandler来处理网络波动可能导致的异常问题。当检测到READER_IDLE时,表明长期未接收到服务器数据;WRITER_IDLE表示长时间未向服务器发送数据;而ALL_IDLE则意味着收发均无数据。针对这些情况,可以通过发送心跳包来保持连接活跃。
302

被折叠的 条评论
为什么被折叠?



