推送技術原理:移動無線網絡長鏈接

移動互聯網應用現狀

由於手機平臺自己、電量、網絡流量的限制,移動互聯網應用在設計上跟傳統 PC 上的應用很大不同,須要根據手機自己的特色,儘可能的節省電量和流量,同時又要儘量的保證數據能及時到達客戶端。 服務器

爲了解決數據同步的問題,在手機平臺上,經常使用的方法有2種。一種是定時去服務器上查詢數據,也叫Polling,還有一種手機跟服務器之間維護一個 TCP 長鏈接,當服務器有數據時,實時推送到客戶端,也就是咱們說的 Push。 網絡

從耗費的電量、流量和數據送達的及時性來講,Push 都會有明顯的優點,但 Push 的實現和維護成本相對較高。在移動無線網絡下維護長鏈接,相對也有一些技術上的難度。本文試圖給你們介紹一下咱們極光推送在 Android 平臺上是如何維護長鏈接。 spa

移動無線網絡的特色

由於 IP v4 的 IP 量有限,運營商分配給手機終端的 IP 是運營商內網的 IP,手機要鏈接 Internet,就須要經過運營商的網關作一個網絡地址轉換(Network Address Translation,NAT)。簡單的說運營商的網關須要維護一個外網 IP、端口到內網 IP、端口的對應關係,以確保內網的手機能夠跟 Internet 的服務器通信。 設計

http://www.cisco.com/en/US/i/100001-200000/110001-120000/119001-120000/119935.jpg

圖片源自 cisco.com.  圖片

NAT 功能由圖中的 GGSN 模塊實現。 ci

大部分移動無線網絡運營商都在鏈路一段時間沒有數據通信時,會淘汰 NAT 表中的對應項,形成鏈路中斷。 get

Android 平臺上長鏈接的實現

爲了避免讓 NAT 表失效,咱們須要定時的發心跳,以刷新 NAT 表項,避免被淘汰。 同步

Android 上定時運行任務經常使用的方法有2種,一種方法用 Timer,另外一種是AlarmManager。 io

Timer

Android 的 Timer 類能夠用來計劃須要循環執行的任務,Timer 的問題是它須要用 WakeLock 讓 CPU 保持喚醒狀態,這樣會大量消耗手機電量,大大減短手機待機時間。這種方式不能知足咱們的需求。 互聯網

AlarmManager

AlarmManager 是 Android 系統封裝的用於管理 RTC 的模塊,RTC (Real Time Clock) 是一個獨立的硬件時鐘,能夠在 CPU 休眠時正常運行,在預設的時間到達時,經過中斷喚醒 CPU。

這意味着,若是咱們用 AlarmManager 來定時執行任務,CPU 能夠正常的休眠,只有在須要運行任務時醒來一段很短的時間。

相關文章
相關標籤/搜索