前天在Google Reader上面看到一个互联网界的朋友分享了一篇关于Push的机制的文章,说实话写的有油无盐。考虑到朋友圈里不少人是在互联网界混迹,决定找点从通讯角度看Push的文章普及一下。找到一篇现成的,作者是handspring@twitter,明显是个互联网人,里面有些移动通信方面的错误,我用<>写了些注释。
有什么推送方案?
Pushmail的意义在于,<首先是省电,然后是省流量>
客户端不再是定时或手动发起收取邮件的动作,而是通过服务器的新邮件通知来触发收取邮件这一行为。在我们常用的公司局域网或固网宽带上,这一创新的意义并不大,因为流量多数都是按月来收取,带宽也不是什么问题,但是相反在移动网络中,流量的资费以及带宽的限制,使得这一方式赢得了移动用户的欢心。
Pushmail采用的通知协议主要有两种,一种是通过短信的形式来通知客户端收取邮件,RIM和一些Pushmail服务商采用这类方式<中国移动的139邮箱也是用的短信方式,可惜这个服务很不叫座>;另一种是通过在在一个已有的TCP连接中发送通知数据包的方式来触发客户端收取邮件,
Gmail和一部分Pushmail服务商采用这类方式, IMAP IDLE是这类方式中知名度和应用较为广泛的一个。
IMAP IDLE 模式是 IMAP 协议的一项高级功能,在这种模式下,客户端登录连接服务器后并无主动查询新邮件的动作,而是停留在
IDLE(空闲) 状态,当服务器接收到新邮件后通知客户端,客户端再开始查询新邮件的动作,此动作完成后,客户端重新回到空闲状态。使用 IMAP
IDLE 模式的好处是,服务器收到新邮件时客户端马上就会收到通知。这种推送方式需要长期在线连接。
而不支持 IMAP IDLE 的客户端或者服务器,检查新邮件是靠客户端手动刷新或者定期查询(比如每5分钟),这种方式查询新邮件会有时间延迟,如果新邮件没有赶上上次查询,必须等到客户端下次查询时才能收到通知。
使用 IMAP IDLE 功能需要第三方软件的支持,因为服务器在客户端没有登录的情况下不知道如何把邮件推送到你的手机,而且服务器只会通知客户端有新邮件,而下载新邮件的工作还需要客户端完成的,并且这个过程中客端必须一直保持与服务器的连接才能收到通知进而完成下载邮件
的工作,所以,这也正是为何很多人说IMAP IDLE是伪Push的原因。
IMAP有什么缺点?
IMAP IDLE诞生已久,对于手机来说,这是不需要运营商或第三方介入最佳的移动邮件解决方案之一。但是IMAP IDLE主要有3个缺点:
1. 效率不高,IDLE只是起到通知的作用,具体的邮件体收取动作仍然由手机发起完成。IMAP在邮件收取上没有一些Pushmail服务提供商的私有协议高效,主要表现在传输过程的数据包压缩率上。
2. 在2G的网络中, 长时间保持在线会影响用户的通话以及短信收发,因此Pushmail服务提供商所提供的短信触发功能更加实用。
3. IMAP IDLE会对邮件服务器造成巨大的压力。
不过作为IMAP的一个变形协议,Push-IMAP较为有效的解决或缓解了上述几个问题,但应用于移动网络还需待以时日。
RIM为何采用短信通知的方式?
BES的方式是从2G网络延用下来的,但不论是短信触发还是用户长时间在线,用户体验上差别不大。只是使用短信触发成本较高,也只有BB这么高的月费才能负担得起。
实际上你去看RIM的3G终端策略,他是所有的手机厂商里推出3G手机最晚的之一,大概就比iPhone 3G早一点。因为单纯使用邮件的话,
BB终端对3G的需求没那么大。
而IDLE是非运营商或第三方中转的最佳方案之一,Exchange搭建成本太高。
短信触发一般都会需要通过运营商或第三方服务,这个在大规模运营的时候是一块不小的成本。
考虑到3G下便宜的流量资费,在国外多数第三方Pushmail服务商都避免使用短信触发方式,来降低用户的使用成本和自身的运营成本。
但RIM采用短信触发的方式是有历史渊源的,在RIM起家的北美市场,
CDMA2000网络占据了将近50%的份额,在CDMA2000网络下。如果数据通信保持长连接,那么即便没有数据在传送,短信和电话也都是无法进入。这就注定了,长连接方式无法应用在CDMA网络。<这一段论点论据结论都是错的。EVDO不论是在idle/dormant/active状态下都是可以接电话的>
相反在GSM网络下,只有在手机的GPRS连接在传输数据时,才偶尔会有电话或短信进不来的现象,多数情况下如果网络侧侦测到有电话进来,会将数据连接占用的信道暂时挂起,分配给电话或短信。这也就是为什么我们会看到手机左上方的双向箭头有一个/的标记。
关于Nokia的Pushmail支持
1. 目前支持IMAP IDLE协议的手机很多,S60的自带邮件客户端基本上都支持,只是自带的邮件使用界面实在简陋到令人发指的地步。
2. Nokia Messaging有点类似于BIS的解决方案,Nokia Messaging本身并非邮件服务器,也不支持POP3或IMAP
IDLE协议,因此在Nokia
Messaging与其客户端程序之间所通讯的协议为Nokia自己研发,同时也支持短信触发,只是并未启用该功能,因此你可以发现Nokia
Messaging在手机的客户端与手机自带的完全不同。
短信触发和长时间在线,哪个更优?
对于短信触发或保持连线方式电力消耗的对比,曾经有人做过评估,结论如下:
According to our past experience, because creating the PDP context is
so power-hungry (about the same as establishing a call), a permanent
TCP connection is more power-efficient for users who are getting about
15-20 emails per day.
Ideally, when SMS push is available for a carrier, users who have
statistically sent/received more than 20 emails daily should
automatically be switched to TCP push and vice-versa。
结论:
在2G网络中,数据语音不可同时使用。
采用短信触发有助于减轻网络的压力,电力消耗取决于邮件数量。
长连接:电力消耗同样取决于邮件数量,日均20封以上比短信触发更优,但是实际上2G不支持数据和语音同时传输,手机功能变得不可靠。
但是随着3G时代的来临,情况也发生了一些变化。3G下语音和数据有单独的信道<又是错误,不过对结论影响不大>,互不干扰,也就是说你在打电话的同时照样能够上网。
短信触发方式,耗电量与2G下相同,邮件数据多仍然费电。
采用长连接方式,由于语音和数据信道分离,虽然建立数据连接的过程依然是需要的, 只是不会相互干扰。
所以如果邮件较多,长连接会比短信触发更省电,因为省去了反复建立数据连接的初始过程。
在3G日益盛行的今天,带宽不再是瓶颈,流量资费也日趋下降,因此多数用户选择BB不会仅仅因为它有良好的邮件体验(公司用户例外),
BB的设计和易用性占了更大的比重。
<最后再贴一篇在准备本文的过程中看到的写的比较靠谱的分析Apple的Push的原理的文章>
<http://xiaolife.com/wordpress/an-introduce-to-iphone-push/>