推送:
服务器给客户端发送消息
开发者通过第三方推送服务提供商将信息直接下发给需要的设备,第三方推送服务提供商与设备建立一条长连接通道,并且将消息路由到APP中。
推送
推送实现的方式
**(1)长连接: ** 客户端主动和服务器建立TCP长连接之后, 客户端定期向服务器发送心跳包, 有消息的时候, 服务器直接通过这个已经建立好的TCP连接通知客户端。
(2)轮询: 客户端定期询问服务器有没有新的消息, 这样服务器不用管客户端的地址是什么, 客户端来问, 直接告诉它就行.轮询间隔太长,实时性太差;轮询间隔太短,资源消耗大。
(3)SMS: 服务器在有新消息时给用户的手机号发一条特殊的短信, 客户端拦截短信后发现是正常短信就放行, 如果是特殊短信就连接服务器取消息。
心跳包
作用:其实主要是为了防止NAT超时。其次是探测连接是否断开。
心跳包和轮询的区别
心跳包和轮询看起来类似, 都是客户端主动联系服务器, 但是区别很大:
(1)轮询是为了获取数据, 而心跳是为了保活TCP连接。
(2)轮询得越频繁, 获取数据就越及时, 心跳的频繁与否和数据是否及时没有直接关系
(3)轮询比心跳能耗更高, 因为一次轮询需要经过TCP三次握手, 四次挥手, 单次心跳不需要建立和拆除TCP连接。
NAT耗时
国内移动无线网络运营商在链路上一段时间内没有数据通讯后, 会淘汰NAT表