【Android学习】断线重连、长连接心跳机制

1,心跳机制

1)概念

定时发送一个自定义的结构体(心跳包),让服务器知道自己还活着,以确保连接的有效性。
长连接比较耗电。

在TCP机制里面,本身是存在有心跳包机制的,也就是TCP选项:SO_KEEPALIVE. 系统默认是设置的2小时的心跳频率。

2)场景

由于手机的无线运营商为了减少网关映射表的负荷,会在表中删除一段时间内未通信的链路,造成链路中断。为了避免这种中断,应用需要以远高于正常频率发送心跳来维护推送的长连接。 

当一台智能手机连上移动网络时,其实并没有真正连接上Internet,运营商分配给手机的IP其实是运营商的内网IP,手机终端要连接上Internet还必须通过运营商的网关进行IP地址的转换,这个网关简称为NAT(NetWork
Address Translation),简单来说就是手机终端连接Internet 其实就是移动内网IP,端口,外网IP之间相互映射。
由于大部分的移动无线网络运营商为了减少网关NAT映射表的负荷,如果一个链路有一段时间没有通信时就会删除其对应表,造成链路中断,正是这种刻意缩短空闲连接的释放超时,原本是想节省信道资源的作用,却让应用不得以远高于正常频率发送心跳来维护推送的长连接。

3)应用

极光推送:集成 JPush 的 SDK 客户端启动后会建立一个到 JPush Cloud 的长链接, 提供 App 永远在线的能力;

2,推送

如果客户端和服务器之间不存在一个长连接,那么服务器无法主动连接客户端的。因而推送功能都是基于长连接的基础是上的。

1)SMS 推送(Short Message Service ,短信服务)

①实现方式

服务器有新内容时,发送一条类似短信的信令给客户端,客户端收到后从服务器中下载新内容。

②优点

省电, 省流量, 在没有网络的偏远地点也能接收到推送消息;

2)轮询推送(pull)

①实现方式

周期性主动获取网络中的数据:
客户端不断的查询服务器,检索新内容,也就是所谓的pull 或者轮询方式 

②缺点

费电, 费流量;

2)长连接 推送

主流方法;

①实现方式

手机端与服务器端建立一条长时间的数据流链接, 手机客户端一直等待服务器端的数据;

②优点

有一条长链接, 有数据的时候才发送数据, 没有时不消耗流量, 比较省流量;

③缺点

由于要保存一条长链接, 比较费电; 在网络不稳定的情况下, 推送容易失败;

3,断线重连

1)概念

android端连接网络之后,当网络断开连接时,为了提高用户体验,android自动检测网络,当有网络时,用户无需进行多余操作,android端自动重新连接网络。

2)实现

猜你喜欢

转载自blog.csdn.net/SunshineTan/article/details/81564666