freeeyes 发表于 2010-3-11 18:19:57

关于推送服务的浅析

最近一段时间,网上多了很多关于推送的产品,一时间,推送服务被炒的沸沸扬扬。
从黑莓的邮件推送服务开始,到Yahoo邮箱开始支持推送,到苹果对开发者开通推送服务API,更多软件都开始内置推送的功能,不可否认,推送服务有它的优势。
那么接下来,主要看看推送服务是怎么运作的吧,或许对我们开发服务器有些启发。(本人最近才开始研究,偏颇之处请谅解)
因为做了一些Apple的相关应用,开始对苹果的推送有了一个大概概念,后来在网上查询了一些关于其他推送的资料,大同小异。
其实推送并不神秘,甚至只要你懂得一些基本服务器开发的道理,你都可以建立你的推送机制。

如果有这么一个需求,我需要当收到邮件的时候,第一时间通知我?
如果你是设计者,你会选择怎么做?
当然,最笨的方法,我在客户端做一个轮询,定期去邮箱看看,有没有新的事情发生?这样的做法,一般消息不及时,而且很难保持实时性。而且非常消耗资源(在移动设备上会很耗电,这是致命的。)
或许,你会说,我会建立和邮件服务器一个长连接,只要对方有新事件发生,服务器就主动提醒客户端。恩,好办法,可是,如果我要的邮箱不止是Yahoo,我还要Msn,QQ,Gamil或者其他,你怎么做?你总不能跑到别人的服务器上去部署你的代码吧。而且,要求人家的代码按照你的想法去写也是不可能的事情。
那怎么办?
推送是一种服务,它不管你要发送什么样的消息,也不去管你发生了什么,准确的说不是一种技术的范畴,因为单从技术讲,它可以简单到你觉得无法再简单。关键是一种服务的思想。
顾名思义,当有资源需要给你展示的时候,你的终端设备需要受到相应的数据。那么这样而言,一定要有一个长连接与之对应才行。来看看苹果的推送是怎么做的吧。
苹果提供给开发者两个API,一个是当你登陆的时候,会调用这个API,传输你的名字给它,让苹果知道你是谁。然后,它会给你返回一个唯一的Key(你的用户名+一个苹果生成的唯一序列号),你得到了这个Key,就表明有一个长连接已经在你和苹果服务器上建立了,这个Key表明了你独一无二的身份。好了,下一步,如果有事情发生,有人要向你Push一些消息,怎么办?这就是苹果第二个API,只要你给出一个Key,并注明发送内容,苹果服务器就会把你的消息发送给这个终端使用者。实现完整的推送。
或许你会说,这么简单,不是和我想的一样么。的确,推送服务器非常简单,简单到只需要最少两个协议,客户端只需要保持一个相应的长链接即可。
苹果的客户端推送服务是一个后台进程,时刻保持着与苹果服务器的链接。这就像一个高速公路,国家建的,当然,它可以向你收费,也可以不收费。
那么很多软件实现了更复杂的推送(黑莓的道理也是如此),比如,"世界杯今天开幕!",我要让所有使用我新闻浏览器(比如是你自己开发的Apple应用)都同时收到这个消息,在界面上弹出,如何做?
很简单,你只需要当软件开启的时候,把苹果返回的那个Key发送给你的服务器保存起来。然后,在服务器上调用苹果的API来个for循环,就可以了。当然这里也可以增加你的逻辑,比如你要区分一些用户是否发送。
再来解释一下邮件实时推送是怎么干的,现在有很多主流的推送平台(比如苹果的,google的,中国移动自己的。。。很多的高速公路,服务于不同的移动终端),你只要在邮箱设置上选择你的推送平台,它就会调用专门的API去给你实现推送。对于Mail客户端,它不用知道你是否在线,只需要在你移动设备上线的时候,记录一下你的那个唯一Key,然后给服务器,服务器发现这个Key存在(在你在线的时候),就给你相应的事件。
QQ和Msn推送也是大同小异,现在主流的推送平台都支持留言功能。因为是否长链接是否断开,只有提供推送服务的服务器知道。
综上所述,我们可以利用不同的推送接口,来增强我们的软件执行能力。增加的,往往只是一小段代码而已。(几乎所有的推送都差不多,只是接口API不同而已。)
从个人角度讲,开发一个推送服务器集群意义不大,好的推送必须有足够的用户基础,它们要愿意安装你的组件。
利用别人的工具,来达到我们的目的,如何利用,才是根本。
页: [1]
查看完整版本: 关于推送服务的浅析