通过长连接的方式实现消息推送,而长连接往往会因为NAT表超时、DHCP租期、网络状态变化等问题而断开,因此需要不时地传输心跳数据来检测和维持连接的可用。而心跳策略做的就是在合适的时间以合适的间隔去发送心跳包,一个好的心跳策略既可以保证连接的稳定以避免消息延迟,又可以降低因为心跳而引起的信道资源消耗以及手机流量和电量损耗。

微信智能心跳策略

前后台区分处理

为了保证微信收消息及时性的体验,当微信处于前台活跃状态时,使用固定心跳。

微信进入后台(或者前台关屏)时,先用几次最小心跳维持长链接。然后进入后台自适应心跳计算。目的是尽量选择用户不活跃的时间段,来减少心跳计算可能产生的消息不及时收取影响。

自适应心跳算法

自适应心跳算法的做法是通过从小到大逐步增加心跳间隔,来逼近出最大可用心跳,在逼近过程中使用延迟心跳测试法,即每次测试新的心跳间隔前,需要使用短心跳连续成功三次,才认为网络相对稳定,可以进行当前心跳间隔的测试。

在最大心跳(即NAT超时值)算出来之后,使用稍微小一点的值作为后台稳定的心跳间隔,以避免计算结果是临界值的情况。在维持稳定心跳的过程中使用动态调整策略,即在发生心跳失败后,使用延迟心跳测试法测试五次,如果有一次成功,则保持当前心跳值不变,如果五次全部失败,则重新计算心跳值,并且以周为周期,每周三重新计算心跳值。

使用冗余Sync和心跳,即在用户的一些主动操作以及联网状态改变时,增加冗余Sync和心跳,确保及时收到消息。如当用户点亮屏幕时,做一次心跳;当微信切换到前台时,做一词Sync; 联网重建信令TCP时,做一次Sync;

关于消息推送服务,想要了解更多也可以咨询极光。

极光推送官方链接:https://www.jiguang.cn/push