心跳检测与断线重连

心跳检测

心跳检测的作用主要是让服务端断开无用的连接,避免一直占用系统资源。TCP默认的心跳机制是2小时,所以心跳机制都是自行实现。

服务端

服务器另开启一个线程去遍历用户对象的列表,用户对象里保存最后接收到用户消息的时间,如果规定时间内没收到客户端的消息就说明客户端断线,此时需处理客户端断线逻辑,并且释放该客户端占用的资源。

当服务器收到客户端ping心跳包后,服务器更新客户端状态,并且发送pong心跳包进行回应。

客户端

客户端:在一个心跳周期后向服务端发送心跳包,等待服务端回应。如果规定时间没有收到服务端消息说明服务器已经断开连接。

断线重连

断线重连可以分几种情况,比如WiFi切4G,手机切后台,弱网环境。

WiFi切4G就是网络地址已经改变,socket会立刻断开。立刻重新连接网关服务器。

手机切后台和弱网环境下差不多。如果心跳检测判断断线了,重新建立连接。

客户端:在登录时,服务器下发了一个cookies,在判断连接不上服务器后,新建socket,带上之前登录的cookids向网关发重新连接请求。由服务器进行验证,验证成功后准许发消息,如果不成功就断开连接。

服务器:在一定时间没有得到客户端回复,判断客户端已经掉线。清理socket,进行离线操作,比如给好友同步已经离线的状态。同时加入到待清理列表中。5分钟如果还没有重新连接,那么就通知各个服务器,此人已经下线清理资源。

返回顶部