Android推送如何实现思路

推送大家都知道是服务器想客户端发消息,这个思维下,我们自然想到让客户端和服务器保持连接状态,这样服务器就可以随时想服务器发消息了,但是有个问题,保持连接的话意味着耗电,那么有没有不用保持连接就能实现推送的目的呢,我们不妨换个思维,在没连接状态下,客户端不也是也能够想服务器发消息呢,我们把客户端和服务器的角色换一下,让app客户端作为推送场景中服务器,让服务器作为推送场景里的客户端,好像蛮对的,但是这里涉及到一个问题,就是服务器端如何获取客户端的地址,我们都知道在C/S架构下的网络通信里面,通场情况下服务器的地址是通过DNS解析域名的,或者是直接就是公网IP地址,但是客户端的使用环境可能是公网IP也可以是内部网络,这个时候这个时候客户端地址并没有在公网注册,或者有DNS解析服务,那么我们如何做到呢,想到这里你应该能想到,客户端主动告诉服务器地址,然后服务器存起来,到要用的时候直接使用。

推送的思路就是:

1、客户端监听自身网络状况,在网络发生变化的时候主动告知服务器地址改变(通过一次网络连接由服务器自行抓取客户端地址),这样服务器可以及时知道客户端地址

2、客户端在某个端口打开网络监听,由于socket处于阻塞状态,耗电量应该相对较低(至少比轮询或者保持连接低),

3、服务器端存储客户端地址,并用某个值表示客户端唯一性,这样就可以跟踪一个客户端地址,

4、在需要推送的时候服务器端找出该客户端的地址,发起网络连接并发送消息


上面只是一个推送实现的思路,至于可靠性,由于没有具体实践,没有数据支撑,但是可以分析一下一些场景

1、完全理想状态:这个时候客户端网络状态稳定,没有发生网络改变状态,那么可靠性应该是100%

2、完全不理想状态:客户端网络时有时无,极不稳定,这种状态可靠性应该很低,低到什么层度,不了解,但是这种极端状态下就算收不到推送我想也是可以接受的

3、普通状态:客户端网络是内网,网络状态相对稳定,服务器向客户端发送消息应该会被得到处理,可靠性应该相对较高

你可能感兴趣的:(Android推送如何实现思路)