IOS Andriod PUSH 机制原理

相信大家在使用iPhone版微信的时候都会有这样的经历,微信已经处于关闭状态了(后台进程运行一段时间就被系统杀掉),这时候我们收到了一个消息提醒,打开微信应用,微信显示“连接中…”和“收取中…”,然后再次显示一次刚才系统推送给我的消息通知。对这个现象比较好奇,于是去知乎上查一下资料,发现知乎上的热心人还真多,看了大家的回答之后,总结如下:

[之所以去知乎查看技术问题,因为我并非技术人员,而知乎上很多开发人员是会用通俗易懂的方式解释好技术问题的,因为里面有不少大牛。]

先介绍一下两个重要的消息推送服务:

iOS 的推送:Apple 官方的 APNs (Apple Push Notification service)。

Android 的推送:Google 官方的 GCM (Google Cloud Messaging)。

其实两个推送服务的机制是比较接近的,以苹果为例,用一个图示表示如下:


采用 APNs 或者 GCM 进行消息推送,消息都会经由苹果或者谷歌的服务器,然后再到用户设备上,这样做的好处主要有以下几点:

1)省电

这个是最直观的体验。由于这两套推送机制都是用户设备和苹果或谷歌的服务器保持一个长连接,而这个长连接是几乎不会耗损多少电量的,采用统一的连接来接收手机上所有应用的通知消息,耗电量少是显而易见的。

由于苹果采用封闭的策略,因此所有第三方应用都必须采取这种推送方式,因此iPhone设备即使电池电量比Android少也更耐用。但由于国内众所周知的原因,Google 服务的稳定性大受考验,而且 Google 对第三方应用推行 GCM 方式并不是强制性的,因此国内的应用开发者几乎都单独在后台常驻一个进程,来专门处理消息推送。

2)开发简单

这个是对应用开发者来说的,一般不使用上述的 APNs 或者 GCM 推送机制,就需要自己搭建一条推送服务,可以采用别人开发的成熟协议,或者自己单独开发(如腾讯),这对于开发者来说还是有门槛的。

3)利于统一管理

采用统一的方式来处理就使得系统可以更高效,不会出现多应用同时处理消息卡顿的情况。

当然坏处的话,一个就是稳定性和实效性依赖于苹果或者谷歌的消息服务器,当然这种机制目前正常情况下都能做到5s以内的延迟。如果是第三方应用单独放置一个常驻进程处理,延迟一般在1s内,可以忽略不计。

以上就是两种常见的消息推送机制。但还有一个情况没有解释,为什么我们打开iPhone应用(如微信),应用还要再次和第三方服务器连接一次,再取回一次消息?

这个可以解释为,当应用处于后台关闭状态时,由iOS系统推送一个消息通知给我们。当我们打开应用后,我们的设备就直接和第三方应用的消息服务器通信了,不需要再经由苹果消息服务器传递。

但为了保证消息传递的完整性,刚才系统推送的消息并没有在应用里面显示,所以应用再与第三方服务器建立连接后,再重新把刚才那条消息取回来,这就造成了系统通知一次消息,应用打开后再显示一次消息。当然这种做法可能在使用体验上有些许瑕疵(也许强迫症患者会这么认为吧),但消息的完整性是必须要保证的。

苹果设备统一采用 APNs 推送机制,至少很省电,而安卓设备几乎每个应用都单独设置一个常驻进程来收发消息,造成的情况是,安卓设备将会非常耗电(即使你不使用,后台却同时开着那么多进程),一方面是由于谷歌服务不稳定造成的,但更重要的是,国内开发者都是自私的,只管自己的应用功能正常,而不会顾用户的手机电池会不会耐用。苹果的推送机制别无选择,但安卓系统在国内是存在稳定的推送服务提供商的,一旦采用也能达到iOS设备的效果,但几乎很少开发者会采用。

另外要穿插一个小插曲就是,微信曾经出现过大范围的宕机情况,消息收发出现严重延迟,实际上是网络服务提供方(如移动、联通、电信)在网络上捣鬼,导致消息传递出现大范围延迟。身处国内,即使强大如腾讯,也要对三大运营商忌惮三分啊!当时明明对运营商暗中使坏切齿痛恨,但仍然咬牙向外部宣称“这是由我们的技术故障造成的……”,当时好像还找了个特别无厘头的解释——施工被挖断光缆。好吧,QQ都活了15年,容灾备份机制会没有,怎么可能出现那么严重的事故呢?!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容