標籤:
http://blog.csdn.net/zhangzeyuaaa/article/details/39028369
目錄(?)[-]
- 無線移動網路的特點
- android系統的推送和IOS的推送有什麼區別
- 推送的實現方式
互連網推送訊息的方式很常見,特別是移動互連網上,手機每天都能收到好多推送訊息,經過研究發現,這些推送服務的原理都是維護一個長串連(要不不可能達到即時效果),但普通的socket串連對伺服器的消耗太大了,所以才會出現像MQTT這種輕量級低消耗的協議來維護長串連,那麼要如何維護長串連呢?
在寫之前,我們首先瞭解一下為什麼android維護長串連需要心跳機制,首先我們知道,維護任何一個長串連都需要心跳機制,用戶端發送一個心跳給伺服器,伺服器給用戶端一個心跳應答,這樣就形成用戶端伺服器的一次完整的握手,這個握手是讓雙方都知道他們之間的串連是沒有斷開,用戶端是線上的。如果超過一個時間的閾值,用戶端沒有收到伺服器的應答,或者伺服器沒有收到用戶端的心跳,那麼對用戶端來說則斷開與伺服器的串連重建立立一個串連,對伺服器來說只要斷開這個串連即可。那麼在智能手機上的長串連心跳和在Internet上的長串連心跳有什麼不同的目的呢?原因就在於智能手機使用的是移動無線網路,那麼我們在講長串連之前我們首先要瞭解無線移動網路的特點。
1.無線移動網路的特點: 當一台智能手機連上移動網路時,其實並沒有真正串連上Internet,電訊廠商分配給手機的IP其實是電訊廠商的內網IP,手機終端要串連上Internet還必須通過電訊廠商的網關進行IP地址的轉換,這個網關簡稱為NAT(NetWork Address Translation),簡單來說就是手機終端串連Internet 其實就是移動內網IP,連接埠,外網IP之間相互映射。相當於在手機終端在移動無線網路這堵牆上打個洞與外面的Internet相連。原理圖如下:(來源網路)
GGSN(GateWay GPRS Support Note 網關GPRS支援節點)模組就實現了NAT功能,由於大部分的移動無線網路電訊廠商為了減少網關NAT映射表的負荷,如果一個鏈路有一段時間沒有通訊時就會刪除其對應表,造成鏈路中斷,正是這種刻意縮短空閑串連的釋放逾時,原本是想節省通道資源的作用,沒想到讓互連網的應用不得以遠高於正常頻率發送心跳來維護推送的長串連。這也是為什麼會有之前的信令風暴,搖收費的傳言,因為這類的應用發送心跳的頻率是很短的,既造成了通道資源的浪費,也造成了手機電量的快速消耗。
2.android系統的推送和IOS的推送有什麼區別:
首先我們必須知道,所有的推送功能必須有一個用戶端和伺服器的長串連,因為推送是由伺服器主動向用戶端發送訊息,如果用戶端和伺服器之間不存在一個長串連那麼伺服器是無法來主動串連用戶端的。因而推送功能都是基於長串連的基礎是上的。
IOS長串連是由系統來維護的,也就是說蘋果的IOS系統在系統層級維護了一個用戶端和蘋果伺服器的長連結,IOS上的所有應用上的推送都是先將訊息推送到蘋果的伺服器然後將蘋果伺服器通過這個系統層級的長連結推送到手機終端上,這樣的的幾個好處為:1.在手機終端始終只要維護一個長串連即可,而且由於這個長連結是系統層級的不會出現被殺死而無法推送的情況。2.省電,不會出現每個應用都各自維護一個自己的長串連。3.安全,只有在蘋果註冊的開發人員才能夠進行推送,等等。
android的長串連是由每個應用各自維護的,但是google也推出了和蘋果技術架構相似的推送架構,C2DM,雲端推送功能,但是由於google的伺服器不在中國境內,其他的原因你懂的。所以導致這個推送無法使用,android的開發人員不得不自己去維護一個長連結,於是每個應用如果都24小時線上,那麼都得各自維護一個長串連,這種電量和流量的消耗是可想而知的。雖然國內也出現了各種推送平台,但是都無法達到只維護一個長串連這種消耗的層級。
3.推送的實現方式:
一:用戶端不斷的查詢服務器,檢索新內容,也就是所謂的pull 或者輪詢方式
二:用戶端和伺服器之間維持一個TCP/IP長串連,伺服器向用戶端push
三:伺服器又新內容時,發送一條類似簡訊的信令給用戶端,用戶端收到後從伺服器中下載新內容,也就是SMS的推送方式。
蘋果的推送系統和googleC2DM推送系統其實都是在系統層級維護一個TCP/IP長串連,都是基於第二種的方式進行推送的。第三種方式由於電訊廠商沒有免費開放這種信令導致了這種推送在成本上是無法接受的,雖然這種推送的方式非常的穩定,高效和及時。
轉 互連網推送服務原理:長串連+心跳機制(MQTT協議)