netty的断线重连问题
手里的这个项目需要作为客户端,不断的接收服务端发来的数据,用的netty框架,但是一直存在一个问题,就是断线重连问题。
什么是断线重连呢?
就是我们这个客户端要保证一直与服务端保持连接,这样客户端才能显示实时的数据给客户,为了保证这个连接一直在,就得不断的去判断这个连接是否还在,如果不在了,就重新连接。
在handler中有个channelInactive方法,可以监听到连接的断开事件。我们可以重写这个方法,比如在这个方法中做重连操作,那么连接断开的时候,就会触发这个方法,来重新连接服务端。
@Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { super.channelInactive(ctx); }
但是非正常的断开,比如服务端突然挂了,或者网线突然断了,都无法触发这个方法,那么针对这些可能性,就需要另外处理了。
对此我发现,在这些意外情况发生后,如果给服务端写数据,这时肯定是会操作失败的,在写失败时,这个channelInactive方法被触发了,这样就好办了。
首先我们加一个监听,如果两分钟内没有收到来自服务端的任何数据,我们就向服务端写数据,如果写失败了,那么就会去触发我们的channelInactive方法,就会去重连了。
搞定!