默认
打赏 发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
引用:设置一个上次包时间,每次收数据和发数据时,都更新一下这个包时间

这里在发数据时也更新上次包时间是否不太合适?因为发数据本身不一定成功,如果直接更新反而可能造成心跳机制检测不及时。
我们的App也实现了类似的延迟心跳机制,不过只在收数据的时候更新包时间,发数据行为会在服务器确认接收返回ACK(同样是收数据)后再更新。
也就是只有在成功接收到数据时才会认为链路是正常的,才认为可以替代心跳包起保活作用。
评论 7
引用:大雄528 发表于 2021-10-26 11:26
发送数据时,更新包时间,是为了能够利用非心跳包(如正常的聊天)的发送来达到心跳的目的。真正的保活还 ...

大概能理解了,其实这里的“上次包时间”本质上是减少客户端发送心跳的频率,客户端利用非心跳包的发送来达到心跳的目的,相当于把心跳的动作给提前了。

此时去更新上次包时间,就是把下一次心跳的时间,按之前的心跳间隔进行顺延。

只不过,我们APP的服务端也是有监听客户端的心跳间隔的,如果指定时间内没有收到客户端的心跳的话,就会回收掉这个长连接。

因此我们就不能在发送时就更新上次包时间,否则如果本次发送失败,下次心跳又延迟,就有可能出现问题。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部