訊息推送,現在越來越火,現在百度也提供的有訊息推送的服務,大家可以去搜尋
關於伺服器端向Android用戶端的推送,主要有三種方式:
1、輪詢,應用程式應當階段性的與伺服器進行串連並查詢是否有新的訊息到達,你必須自己實現與伺服器之間的通訊,例如訊息排隊等。而且你還要考慮輪詢的頻率,如果太慢可能導致某些訊息的延遲,如果太快,則會大量消耗網路頻寬和電池;
2、SMS(通過傳送簡訊並解析簡訊內容來擷取伺服器端的指令),這個出現的問題是很難找到免費的網關來傳送簡訊;
3、最後就是持久串連,主要是Socket通訊,這個解決了效能問題,但是耗電問題依舊沒能解決。
在這裡,我們主要介紹的是第三種,用持久串連的方式來進行推送。現在比較成熟的及時訊息傳遞通訊協定共有四種,而無疑最為主流就是XMPP協議,它是一種基於XML的傳遞通訊協定,具有很強的靈活性和可擴充性。它的特點是將複雜性從用戶端轉移到了伺服器端。在網上可以找到很多的XMPP資料,這裡就不在贅述了,不然越扯越多。總之,XMPP主要顯著的優點主要有以下幾個方面:
1、 分布式 任何人都可以運行自己的XMPP伺服器,它沒有主伺服器
2、 安全性很高。使用SASL及TLS等技術的可靠安全性
3、 開發性 它是開源的,易於進行學習和瞭解
4、 跨平台 毋庸置疑,使用的XML進行傳輸的
說完優點,我們言歸正傳,基於XMPP協議的java開發有一個開源架構,那就是smack,它主要封裝了一些XMPP的實現。而如果把它直接用在Android上是不行的,因為android缺少了一些java的類庫,於是一個改進版的asmack誕生了,它是專門為android而改進的android smack。而另外一個開源架構的誕生,則是對在引用smack的基礎上實現和伺服器端的持久串連,以實現伺服器對用戶端的推送,那就是android push notification,簡稱androidpn。
Androidpn在用戶端整合了asmack。這樣就可以很容易的簡立一個和伺服器端的基於xmpp協議的socket串連。Androidpn的用戶端中,進行管理串連的類是XmppManager,它主要用來管理串連的資訊,比如XMPP的連接埠、IP、登入的使用者名稱密碼,以及對串連的維護。為什麼還有使用者名稱和密碼?這不得不提到XMPP的具體細節。整個伺服器端和用戶端的通訊是基於一個session(會話)過程,會話開始,首先會指定伺服器的連接埠號碼,然後把上述提到的資訊發送到伺服器端,怎麼發送訊息的呢?以<stream>根節點的方式開始傳遞,只有在伺服器和用戶端關閉的時候才會發送它的結束標記</stream>。用戶端通過XMPP協議只用做的就是接收訊息,而所有其它的操作都交給伺服器,比如管理串連、訊息儲存等等,這樣就很大程度的減輕了用戶端的負擔。那麼用戶端和伺服器端的訊息回應是如何?的?如要通過一個ID來標識,具體細節可以去查看XMPP協議。
一旦註冊綁定後,伺服器端就和用戶端建立了串連,用戶端只用負責去接收訊息。所以當我們應用Androidpn的時候,用戶端會非常的簡單。而在伺服器端,Androidpn又做了什麼呢?
伺服器端的展示方面,androidpn主要用到的技術是Spring和Hibernate。主要是用來展示使用者狀態和發送資訊用的,下面的是伺服器端的介面:
主要要說的還是XMPP的管理。在伺服器端的源碼中一個org.androidpn.server.xmpp.net.Connection類,主要是代表一個伺服器上的XMPP串連,注意只是一個,它可以確保在伺服器關閉的時候,發送一個</stream>標記到用戶端,告知串連斷開,需重新串連。
org.androidpn.server.xmpp.session.SessionManager主要使用者管理所有會話,比如串連斷開,刪除session以及建立串連,添加session等等。
而在管理Socket串連的時候,androidpn採用了MINA架構來進行管理,MINA的優點就是改變了我們傳統的管理socket的方式,比如沒建立一個socket開一個線程,而MINA可以實現多個線程管理N多個使用者。在處理高並發的推送上無疑是有巨大的好處的。
合理的利用監聽器來管理session,也是androidpn的優點。在安全性方面,制定了TLS(安全傳輸層)策略,並卻採用了安全認證,這些方面都做的不錯。
當然,不可避免的30秒鐘的心跳包還是必不可少的。
總之,用Androidpn好處有以下方面:
1.採用完全開放的XMPP協議進行資料轉送(QQ,MSN,GTalk等都是採用的這種協議);
2、良好的架構支援(專門為android 而產生的推送架構asmack,以及很好的管理socket的架構MINA,都是很成熟的產品);
3、完全開放的原始碼(我們可以在androidpn的基礎上進行修改,來滿足我們的任何需求變更);
4、大大的減少了用戶端的代碼,降低了android的開發難度。
缺點不言而喻,使用了太多的架構,如果想要改一些具體的實現,可能會遷移發動全身。
大家試試快去吧,具體Androidpn可以在網上搜到,大家就自己去下載吧,
本文的部分內容摘自網路。