最近开发一个项目,用了心跳包,在这里写一笔。
-
首先在Server端设立一个倒计时,比方说隔9秒去检测一下心跳包标记(一个flag,当收到心跳包时置为true),如果为false则关闭连接处理后事,否则将标记设置为false。
-
然后在Server端设立一个接收心跳包就反馈心跳包并且将心跳包标记设置为true的机制。
-
最后在Client端设置一个循环,可以在Thread里,每隔6秒检查一下服务器的心跳包反馈,如果有就发送一个心跳包,如果没有就关闭连接处理后事。
之间的心跳包联系大概是:
- 客户端发送心跳包然后sleep(6);
- 服务器接收到心跳包,flag = true,回复心跳包
- 服务器已经sleep了9秒,去检测flag,为true,接着sleep(9)
- 客户端sleep了6秒去检查心跳包反馈,发现收到,发送心跳包,sleep(6)
- 重复2
- 重复3
- 客户端掉线了,没有发送心跳包
- 服务器sleep了9秒,去检测flag,为false,服务器断开和客户端的链接
反过来,服务器掉线则是:
- 客户端发送心跳包然后sleep(6);
- 服务器接收到心跳包,flag = true,回复心跳包
- 服务器已经sleep了9秒,去检测flag,为true,接着sleep(9)
- 客户端sleep了6秒去检查心跳包反馈,发现收到,发送心跳包,sleep(6)
- 服务器掉线了,没有反馈心跳包以及设置flag
- 服务器已经sleep了9秒,去检测flag,为false,关闭与客户端链接
- 客户端sleep了6秒去检查心跳包反馈,发现没收到,关闭与服务器连接