如今的手机每天都会被各种App的消息推送覆盖,消息推送也成了周末去哪儿APP增加自己曝光量的一种重要手段。消息推送的技术也日渐成熟,各种平台纷纷
出现,抢占这一业务,本文就从技术角度来吐槽吐槽。本文是由我们的无线开发团队原创和整理,如果转载请务必先咨询本团队。
首先介绍下消息推送,即Push的技术基础:
什么叫Push?
真正的Push应该是只要一个Client设备连接到互联网中,什么也不做等在那里,Server端随时都可以将数据(消息是数据的一种)发送到这个Client上,就好像Server等在那里,Client随时可以访问Server一样。
用Server端做个类比,当一个Web
Server在互联网上部署好以后,任何一台电脑都可以通过互联网去访问Server:从Server获取数据、向Server提交数据。向Server
提交数据实际就是Client
Push数据到Server。在这个模式中,Server所做的事情就是等待,等待任意的Client主动来访问它,并且不需要和Client端保持连
接。Server是如何做到这点的呢,实际上是通过listen的方式,具体来说是socket的listen,Server端不需要做额外的事情,只要
告诉socket,你去listen吧,有Client请求过来就交给对应的程序去完成吧,就这么简单。
Client端的Push是否能做到这点呢,我们这里只考虑Client的设备是智能机的情况,主要就是Android、iOS,还有winPhone?
大概吧。Android和iOS都是基于linux系统的,有完整的网络协议架构,所以使用socket完全没有问题,winPhone作为一个智能机来
说,我想也是没有问题的。所以对于这些智能机来说,让一个socket去listen,等待互联网上的任意一台其他设备来访问是可行的,Server
Push数据给Client只需要去连接Client的socket就可以了。
事情是这么简单吗?显然不是,不然就不会有各个大小公司跳出来做平台了。
ps:首先我们要了解socket是什么,socket是基于tcp/ip协议的一个实现,而tcp/ip是整个互联网的协议基础。关于tcp/ip,socket具体内容不在这里赘述,不了解的可以去查相关资料。
Server端和Client端有一个很重要的区别,Server端是有固定的公网ip的,而Client端的ip不是固定的,甚至不一定具有公网ip。
Client访问Server时,实际是通过ip找到Server进行访问的(域名?域名最终也是被解析成ip),有固定的公网ip才方便互联网上的其他
设备来访问。而反过来Server想找某个Client时,由于Client的ip不固定,Server端是无法找到Cli