IM二分法智能心跳策略 stabledSuccessCount > 50的时候,稳定心跳尝试上调
failedCount 心跳连续失败次数,当failedCount >= 3的时候,才会认为当前心跳是不可用的,会尝试下调,如果心跳一直失败...那么客户端对于write出去的消息会有一个超时检测(20s,但是消息ack没有超时检测),write数据出去后收不到响应的回馈,20s超时到期,此时会通过心跳来验证TCP连接的有效性,心跳超时就进行断线重连...所以这里会有60秒以上的消息延迟
TCP无效连接,如果是客户端的消息ack数据发送出去但是服务端没有收到,那么将遇到两种情况,第一是服务器连接超时端开,第二是客户端下一个心跳检测发现TCP连接是无效的,然后断线重连...;还有一种是modem其实已经断网了,此时modem可能在进行重连,但是并没有网络切换广播,此时应用层是无感知的,但是TCP连接可以立马感知到,并被动断开,这时候检测本地网络也是可用的(不准),所以这时候会导致心跳误下调...,但是curMinHeart和curMaxHeart又很接近导致二分法无法下调的时候,就直接把curHeart设置成minHeart
稳定心跳
有效的稳定心跳是NAT临界值
探测心跳达到最大心跳值的时候认为是稳定心跳 1.2K30
|