Netty tcp连接 客户端如何向服务端发送心跳数据

zilei 发布于 2014/07/08 17:34
阅读 5K+
收藏 0

tcp连接 服务端是Python写得,netty写客户端。客户端如何向服务发送心跳信息,来验证服务端没有挂掉。比如服务端网络异常,下面代码不会抛异常

     public void channelActive(final ChannelHandlerContext ctx) throws Exception {


                            LOGGER.debug("活动中-----:");
                                while (true){
                                    LOGGER.debug("向服务器发送心跳数据");
                                    final ChannelFuture f = ctx.writeAndFlush("a");
                                    f.addListener(new ChannelFutureListener() {
                                        @Override
                                        public void operationComplete(ChannelFuture future) {
                                            if(!f.isSuccess()){
                                                LOGGER.debug("连接失败");
                                            }
                                        }
                                    });
                                    Thread.sleep(3*1000);
                                }
                        }

加载中
0
Grrrr
Grrrr

建议楼主先把netty深入了解下,channelActive是链接建立成功的时调用一次的。也就是这个方法总是在链接建立成功后才被调用的。

LOGGER.debug("连接失败");//应该是发送心跳消息失败。

while (true){ // 定时心跳检测根本不是这么用的。

..........

Thread.sleep(3*1000);

}

服务端主动异常,可以向所有链接的客户端主动发异常消息,这样客户端就可以感知(先将所有client加入group,然后直接向group推消息,并且链接没有断的情况下)客户端通过messageReceived取消息。

如果服务端异常导致链接断掉,客户端也可以感知。通过channelInActive

z
zilei
我测试了一下服务端直接把网线拔掉,channelInactive貌似没感应到而且exceptionCaught 也没抛出异常
返回顶部
顶部