三、如何实现心跳?
Voovan 内部实现了一个优雅且低耦合的心跳的支持,使用起来是非常简单的。
- 1.调用
org.voovan.network.HeartBeat
心跳类的attachSession方法,将心跳类绑定到一个指定的 Socket 会话(org.voovan.network.IoSession
) - 2.调用
org.voovan.network.HeartBeat
心跳类的beat
方法进行心跳 - 3.通过判断调用
org.voovan.network.HeartBeat
心跳类的getFailedCount()方法的返回值确定心跳失败的次数,进行自己的业务操作,比如重连.下面我们来看代码,以下的代码org.voovan.test.network.ClientHandlerTest
的一个片段,在onIdle事件中调用了心跳类,这样我们可以通过空闲事件的触发事件来触发心跳类,具体大家看一下注释吧
@Override
public void onIdle(IoSession session) {
//心跳依赖于 idle 时间,这个参数在构造 socket 的时候设置具体查看 org.voovan.network.aio.AioSocket
//服务端和客户端使用了两种不同的心跳绑定方式,这是其中一种
if(!(session.socketContext() instanceof UdpSocket)) {
HeartBeat heartBeat = session.getHeartBeat();
if (heartBeat == null) {
//心跳绑定到 Session
heartBeat = HeartBeat.attachSession(session, ConnectModel.SERVER, "PINGq", "PONGq");
}
//心跳一次, 返回 true:本次心跳成功, false: 本次心跳失败
System.out.println("==>" + heartBeat.beat(session));
if (heartBeat.getFailedCount() > 5) {
session.close();
}
}
}