转 互联网推送服务原理:长连接+心跳机制(MQTT协议)
http://blog.csdn.net/zhangzeyuaaa/article/details/39028369
?
目錄(?)[-]
? 在寫之前,我們首先了解一下為什么android維護(hù)長連接需要心跳機(jī)制,首先我們知道,維護(hù)任何一個長連接都需要心跳機(jī)制,客戶端發(fā)送一個心跳給服務(wù)器,服務(wù)器給客戶端一個心跳應(yīng)答,這樣就形成客戶端服務(wù)器的一次完整的握手,這個握手是讓雙方都知道他們之間的連接是沒有斷開,客戶端是在線的。如果超過一個時間的閾值,客戶端沒有收到服務(wù)器的應(yīng)答,或者服務(wù)器沒有收到客戶端的心跳,那么對客戶端來說則斷開與服務(wù)器的連接重新建立一個連接,對服務(wù)器來說只要斷開這個連接即可。那么在智能手機(jī)上的長連接心跳和在Internet上的長連接心跳有什么不同的目的呢?原因就在于智能手機(jī)使用的是移動無線網(wǎng)絡(luò),那么我們在講長連接之前我們首先要了解無線移動網(wǎng)絡(luò)的特點(diǎn)。
1.無線移動網(wǎng)絡(luò)的特點(diǎn):
??????? 當(dāng)一臺智能手機(jī)連上移動網(wǎng)絡(luò)時,其實(shí)并沒有真正連接上Internet,運(yùn)營商分配給手機(jī)的IP其實(shí)是運(yùn)營商的內(nèi)網(wǎng)IP,手機(jī)終端要連接上Internet還必須通過運(yùn)營商的網(wǎng)關(guān)進(jìn)行IP地址的轉(zhuǎn)換,這個網(wǎng)關(guān)簡稱為NAT(NetWork Address Translation),簡單來說就是手機(jī)終端連接Internet 其實(shí)就是移動內(nèi)網(wǎng)IP,端口,外網(wǎng)IP之間相互映射。相當(dāng)于在手機(jī)終端在移動無線網(wǎng)絡(luò)這堵墻上打個洞與外面的Internet相連。原理圖如下:(來源網(wǎng)絡(luò))GGSN(GateWay GPRS Support Note 網(wǎng)關(guān)GPRS支持節(jié)點(diǎn))模塊就實(shí)現(xiàn)了NAT功能,由于大部分的移動無線網(wǎng)絡(luò)運(yùn)營商為了減少網(wǎng)關(guān)NAT映射表的負(fù)荷,如果一個鏈路有一段時間沒有通信時就會刪除其對應(yīng)表,造成鏈路中斷,正是這種刻意縮短空閑連接的釋放超時,原本是想節(jié)省信道資源的作用,沒想到讓互聯(lián)網(wǎng)的應(yīng)用不得以遠(yuǎn)高于正常頻率發(fā)送心跳來維護(hù)推送的長連接。這也是為什么會有之前的信令風(fēng)暴,微信搖收費(fèi)的傳言,因?yàn)檫@類的應(yīng)用發(fā)送心跳的頻率是很短的,既造成了信道資源的浪費(fèi),也造成了手機(jī)電量的快速消耗。
2.android系統(tǒng)的推送和IOS的推送有什么區(qū)別:
??????? 首先我們必須知道,所有的推送功能必須有一個客戶端和服務(wù)器的長連接,因?yàn)橥扑褪怯煞?wù)器主動向客戶端發(fā)送消息,如果客戶端和服務(wù)器之間不存在一個長連接那么服務(wù)器是無法來主動連接客戶端的。因而推送功能都是基于長連接的基礎(chǔ)是上的。
??????? IOS長連接是由系統(tǒng)來維護(hù)的,也就是說蘋果的IOS系統(tǒng)在系統(tǒng)級別維護(hù)了一個客戶端和蘋果服務(wù)器的長鏈接,IOS上的所有應(yīng)用上的推送都是先將消息推送到蘋果的服務(wù)器然后將蘋果服務(wù)器通過這個系統(tǒng)級別的長鏈接推送到手機(jī)終端上,這樣的的幾個好處為:1.在手機(jī)終端始終只要維護(hù)一個長連接即可,而且由于這個長鏈接是系統(tǒng)級別的不會出現(xiàn)被殺死而無法推送的情況。2.省電,不會出現(xiàn)每個應(yīng)用都各自維護(hù)一個自己的長連接。3.安全,只有在蘋果注冊的開發(fā)者才能夠進(jìn)行推送,等等。
?????? android的長連接是由每個應(yīng)用各自維護(hù)的,但是google也推出了和蘋果技術(shù)架構(gòu)相似的推送框架,C2DM,云端推送功能,但是由于google的服務(wù)器不在中國境內(nèi),其他的原因你懂的。所以導(dǎo)致這個推送無法使用,android的開發(fā)者不得不自己去維護(hù)一個長鏈接,于是每個應(yīng)用如果都24小時在線,那么都得各自維護(hù)一個長連接,這種電量和流量的消耗是可想而知的。雖然國內(nèi)也出現(xiàn)了各種推送平臺,但是都無法達(dá)到只維護(hù)一個長連接這種消耗的級別。
3.推送的實(shí)現(xiàn)方式:
一:客戶端不斷的查詢服務(wù)器,檢索新內(nèi)容,也就是所謂的pull 或者輪詢方式
二:客戶端和服務(wù)器之間維持一個TCP/IP長連接,服務(wù)器向客戶端push
三:服務(wù)器又新內(nèi)容時,發(fā)送一條類似短信的信令給客戶端,客戶端收到后從服務(wù)器中下載新內(nèi)容,也就是SMS的推送方式。
蘋果的推送系統(tǒng)和googleC2DM推送系統(tǒng)其實(shí)都是在系統(tǒng)級別維護(hù)一個TCP/IP長連接,都是基于第二種的方式進(jìn)行推送的。第三種方式由于運(yùn)營商沒有免費(fèi)開放這種信令導(dǎo)致了這種推送在成本上是無法接受的,雖然這種推送的方式非常的穩(wěn)定,高效和及時。
轉(zhuǎn)載于:https://www.cnblogs.com/wikiki/p/4337605.html
總結(jié)
以上是生活随笔為你收集整理的转 互联网推送服务原理:长连接+心跳机制(MQTT协议)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: erl0007 - erlang 远程节
- 下一篇: linux系统内核流转浅析