netty的断线重连问题

Posted lcxsummer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了netty的断线重连问题相关的知识,希望对你有一定的参考价值。

手里的这个项目需要作为客户端,不断的接收服务端发来的数据,用的netty框架,但是一直存在一个问题,就是断线重连问题。

什么是断线重连呢?

就是我们这个客户端要保证一直与服务端保持连接,这样客户端才能显示实时的数据给客户,为了保证这个连接一直在,就得不断的去判断这个连接是否还在,如果不在了,就重新连接。

在handler中有个channelInactive方法,可以监听到连接的断开事件。我们可以重写这个方法,比如在这个方法中做重连操作,那么连接断开的时候,就会触发这个方法,来重新连接服务端。

@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception 
    super.channelInactive(ctx);

 

但是非正常的断开,比如服务端突然挂了,或者网线突然断了,都无法触发这个方法,那么针对这些可能性,就需要另外处理了。

对此我发现,在这些意外情况发生后,如果给服务端写数据,这时肯定是会操作失败的,在写失败时,这个channelInactive方法被触发了,这样就好办了。

首先我们加一个监听,如果两分钟内没有收到来自服务端的任何数据,我们就向服务端写数据,如果写失败了,那么就会去触发我们的channelInactive方法,就会去重连了。

技术图片

技术图片

搞定!

 

以上是关于netty的断线重连问题的主要内容,如果未能解决你的问题,请参考以下文章

Netty 断线重连解决方案

Netty 客户端断线重连

用netty实现客户端断线重连

即时通讯开发Netty实现心跳机制断线重连机制

im即时通讯开发之用Netty实现心跳机制断线重连机制

Netty 如何实现心跳机制与断线重连?