
三、Android的推送方案
Android的推送方案就比較多了,也比較亂。例如,有Google官方提供的C2DM(Android Cloud to Device Messaging);第三方的推送服務(wù)(如極光推送);還有通過各種協(xié)議實(shí)現(xiàn)的推送服務(wù)端程序(如AndroidPN),用戶通過這些服務(wù)端程序可以搭建自己的推送服務(wù)器。這些推送技術(shù)會(huì)在本節(jié)后面的部分詳細(xì)介紹,本節(jié)先來介紹一下Android中經(jīng)常使用的各種推送技術(shù)。當(dāng)然,這些推送技術(shù)也能用于其它的移動(dòng)設(shè)備,但由于Android的官方推送服務(wù)(C2DM)在國內(nèi)使用上有一些問題,所以基于Android的第三方推送服務(wù)較其它系統(tǒng)多,因此這里主要針對Android來介紹。
通常推送技術(shù)會(huì)使用如下兩種方式實(shí)現(xiàn)。
1. 輪詢(Pull)方式
2. 持久連接方式(服務(wù)端Push方式)
輪詢方式就是客戶端以一定的時(shí)間間隔不斷查詢服務(wù)端是否有新的消息。這種方式必須自己實(shí)現(xiàn)與服務(wù)器之間的通信機(jī)制,例如消息隊(duì)列等。而且還要考慮輪詢的頻率,如果太慢可能導(dǎo)致某些消息的延遲,如果太快,則會(huì)大量消耗網(wǎng)絡(luò)帶寬和電池。所以大多數(shù)推送服務(wù)都不會(huì)使用輪詢方式。
持久連接方式也就是Push方式,對于客戶端來說,是一種被動(dòng)的方式,而主動(dòng)權(quán)在服務(wù)端,當(dāng)有消息時(shí),服務(wù)端會(huì)向所有注冊到推送服務(wù)器的客戶端推送消息。這種推送方式的好處是可以保證實(shí)時(shí)性,而且客戶端實(shí)現(xiàn)簡單。當(dāng)然,也會(huì)有不足,例如,如果大量的客戶端與服務(wù)端保持長連接時(shí),會(huì)消耗服務(wù)器的資源。不過在未推送消息時(shí),這些長連接就成了空閑連接,通常這種連接主要消耗的是內(nèi)存資源。例如,200萬用戶可能會(huì)消耗數(shù)十GB的內(nèi)存。因此搭建這種推送機(jī)制時(shí)要使用性能好的服務(wù)器。
持久連接的實(shí)現(xiàn)有很多方式,例如,可以使用XMPP作為通信協(xié)議。XMPP的主要優(yōu)勢是協(xié)議成熟、強(qiáng)大,可擴(kuò)展性強(qiáng)。XMPP更多地用于IM系統(tǒng)中,后面要介紹的AndroidPN也是用了XMPP協(xié)議。
XMPP也有明顯的缺點(diǎn),例如,協(xié)議很復(fù)雜,如果吃透XMPP協(xié)議可能需要很長時(shí)間,還有就是由于XMPP是基于XML的,從而造成了數(shù)據(jù)冗余、這樣會(huì)造成移動(dòng)設(shè)備費(fèi)流量、耗電等弊病。
除了XMPP,還可以使用MQTT協(xié)議,這種協(xié)議的主要優(yōu)勢是簡潔、小巧、可擴(kuò)展性強(qiáng),從而帶來了省流量、省電等優(yōu)點(diǎn),而且有C++版的服務(wù)端組件rsmb。缺點(diǎn)是協(xié)議不夠成熟,而且實(shí)現(xiàn)較復(fù)雜,而且rsmb不開源,部署硬件的成本較高。
盡管C2DM服務(wù)在國內(nèi)可能不太穩(wěn)定或有一些地區(qū)不可用,但還是有必要介紹一下C2DM的原理。不過對于在國內(nèi)使用的應(yīng)用最好使用第三方的推送服務(wù),或自己假設(shè)推送服務(wù)器。
C2DM和IOS的APNS以及Window Phone的MPNS大同小異。還需要自己準(zhǔn)備一臺推送服務(wù)器,并通過如下步驟實(shí)現(xiàn)消息的推送。
第1步:移動(dòng)設(shè)備上的C2DM服務(wù)需要與Google官方的C2DM服務(wù)器交互,驗(yàn)證當(dāng)前設(shè)備是否在C2DM服務(wù)器上注冊了,如果已經(jīng)注冊,C2DM服務(wù)器會(huì)返回一個(gè)注冊ID給客戶端的C2DM服務(wù)。(①和②)
第2步:客戶端的C2DM服務(wù)會(huì)與自己的推送服務(wù)器交互,將賬號和C2DM服務(wù)器返回的注冊ID傳給推送服務(wù)器。(③)
第3步:如果要推送消息,推送服務(wù)器會(huì)將注冊ID和要推送的消息先發(fā)送到C2DM服務(wù)器,然后C2DM服務(wù)器會(huì)直接將消息推送給客戶端(手機(jī)、平板電腦的設(shè)備)(④和⑤)。
讀者可以對照圖4來理解這3個(gè)步驟。
除了使用官方的推送方案外,現(xiàn)在國內(nèi)涌現(xiàn)出多個(gè)第三方的推送方案,例如,極光推送(JPush)、百度推送等。讀者也可以用一下,這些同時(shí)通常是免費(fèi)的(可能推送多媒體數(shù)據(jù)需要收費(fèi))。