记录 "心跳机制" 相关问题
论坛里碰到一个问题,记录一下。
一、心跳”分为两种,第一种是客户端发起的心跳,第二种是服务端发起的心跳。
客户端发起的心跳:客户端每隔一段时间发送策略消息给Socket服务器,Socket服务器原路返回策略消息,如果客户端在设定时间段内没有收到Socket服务器的返回消息,经重试机制后,判定Socket服务器已Down,关闭连接。
服务端发起的心跳:服务端实时记录每条Socket的IO操作时间,每隔一段时间获取所有Socket列表的快照,扫描每条Socket,如果该Socket的IO操作时间距当前时间已超出设定值,则判定客户端Down,关闭连接。
二、客户端起一个线程倒计时10秒,然后一个线程接受数据,如果在10秒内受到来自服务端的数据,那么重新倒计时,如果10秒到了 没有收到来自服务器的数据,那么就表示与服务器失去了连接,当然接受数据的同时每5秒向服务器发送一个数据过去,然后服务端
每5秒循环的为在线的每一个客户端发送一个数据过去,不过发送前判断一下该客户端上一次发来的数据的时间与现在的时间差,超过10秒,表示客户端挂了,当然也有一个线程在接受数据,接收到一个客户端数据的时候,将该客户端的数据发来的时间重新标记。