netty的心跳检测实现
来源:互联网 发布:php验证码源码 编辑:程序博客网 时间:2024/05/01 08:58
由于netty采用了事件机制,因此给链路监测和连接管理带来了一些麻烦,因此最好给链路加上心跳处理(1) 服务器端关键点,主要在initpipe中和实现IdleStateAwareChannelHandler. pipeline.addLast("timeout", new IdleStateHandler(timer, 10, 10, 0));//此两项为添加心跳机制 10秒查看一次在线的客户端channel是否空闲,IdleStateHandler为netty jar包中提供的类 pipeline.addLast("hearbeat", new Heartbeat());如果要捕获检测结果,需要继承IdleStateAwareChannelHandler,来判断客户端是否存在,但是这种机制还得一个心跳包发送来检测。public class Heartbeat extends IdleStateAwareChannelHandler{ int i = 0; @Override public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) throws Exception { // TODO Auto-generated method stub super.channelIdle(ctx, e); if(e.getState() == IdleState.WRITER_IDLE) i++; if(i==3){ e.getChannel().close(); System.out.println("掉了。"); } } }(2)客户端关键点,也在booststrap,initpipe和IdleStateAwareChannelHandler bootstrap.setOption("allIdleTime","5"); //这里,很重要 pipeline.addLast("timeout", new IdleStateHandler(timer, 0, 0, 10)); pipeline.addLast("idleHandler", new ClientIdleHandler()); 实现IdleStateAwareChannelHandler 的handler负责定时发送检测包public class ClientIdleHandler extends IdleStateAwareChannelHandler { final Logger logger = LoggerFactory.getLogger(ClientIdleHandler.class); @Override public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) throws Exception { if( e.getState() == IdleState.ALL_IDLE){ logger.debug("链路空闲!发送心跳!S:{} - C:{} idleState:{}", new Object[]{ctx.getChannel().getRemoteAddress(), ctx.getChannel().getLocalAddress() , e.getState()}); e.getChannel().write(MessageHelper.buildMessageEcho()); super.channelIdle(ctx, e); } }}此外为了获得一些业务阻塞异常导致一些网路不确认状态,采取办法是:用发送upstream的异常来通知解决。 public void exceptionCaught( ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { if (this == ctx.getPipeline().getLast()) { logger.warn( "EXCEPTION, please implement " + getClass().getName() + ".exceptionCaught() for proper handling.", e.getCause()); } ctx.sendUpstream(e); }
1 1
- netty的心跳检测实现
- netty的心跳检测实现
- 基于netty的心跳检测
- 基于netty的心跳检测
- 基于netty的心跳检测
- netty 5实现长连接心跳检测
- netty 心跳检测
- Netty心跳检测
- 通过netty实现服务端与客户端的长连接通讯,及心跳检测。
- Netty实现服务端客户端长连接通讯及心跳检测
- Netty实现服务端客户端长连接通讯及心跳检测
- Netty实现服务端客户端长连接通讯及心跳检测
- netty实现tcp长连接和心跳检测
- Netty 4.0 实现心跳检测和断线重连
- Netty 4.0 实现心跳检测和断线重连
- Netty数据通信和心跳检测
- Netty心跳检测(1)
- Netty心跳检测篇之IdleStateHandler
- 6T-sram存储单元原理分析
- redis简介
- c++判断当前系统及编译器
- Haproxy解析
- 状态压缩讲解
- netty的心跳检测实现
- 实模式和保护模式区别及寻址方式
- redis使用规范
- LeetCode_DP_Word Break II
- 妈妈去世了
- Jayspt加密外部属性
- python修饰器
- MySQL 分页查询性能分析
- JavaScript中的this代表什么?