Mars 是微信官方的跨平台跨业务的终端基础组件。
心跳是保持长连接的必需手段,MARS也提供了智能心跳的方案。
Mars对长连的管理有两个方面,一个是心跳(HeartBeat),一个是重连(Reconnect)。
这两个动作都是有策略性的。
一般心跳会间隔性的发出一个很小的心跳包,通过服务端返回来判断连接是否健康。
在网络断开时,会自动重连,一般遵循逐渐递增的方法,递增的策略有所不同。
在Mars中,对这两个策略有更精细化的管理,在Mars中对App运行的状态分了3种:
前台活动状态(forground-active),前台状态10分钟以上,可以认为是App正常运行状态;
后台活动状态(background-active),IOS切后台10分钟内为后台活动状态;
3 .后台非活动状态(inactive),IOS切到后台10分钟后状态为inactive。
这三种状态下心跳和重连的策略进行了调整,分类比较下:
HeartBeat
active: 以最小间隔发送心跳包,设定为3.5分钟
inactive:非活动状态: 每次递增20s,直到心跳最大间隔 10分钟
Reconnect:
forground-active:
前台状态大于等于10分钟,4分钟一次;
前台状态大于等于1分钟,小于10分钟,30s重连一次;
前台状态小于1分钟,15s重连一次;
background-active: 5分钟重连一次
inactive: 0s,60s,120s,240s,360s,480s,600s,600s...
参考
TCP 进阶
https://halfrost.com/advance_tcp
Tencent/mars
https://github.com/Tencent/mars#mars_cn
微信Mars策略分析
https://blog.dreamtobe.cn/mars/
Android弱网通信探究
https://blog.dreamtobe.cn/2016/08/16/android_weak_network/
智能心跳机制:解决网络的不确定性
https://time.geekbang.org/column/article/134231