Android中開發IM即時通信功能的方案

這裏有必要普及一下xmpp是個什麼東西?android

引用某孃的定義:api

      XMPP是一種基於標準通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性。所以,基於XMPP的應用具備超強的可擴展性。通過擴展之後的XMPP能夠經過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端創建如內容發佈系統和基於地址的服務等應用程序。並且,XMPP包含了針對服務器端的軟件協議,使之能與另外一個進行通話,這使得開發者更容易創建客戶應用程序或給一個配好系統添加功能。服務器

網絡結構:網絡

      XMPP中定義了三個角色,客戶端,服務器,網關。通訊可以在這三者的任意兩個之間雙向發生。服務器同時承擔了客戶端信息記錄,鏈接管理和信息的路由功能。網關承擔着與異構即時通訊系統的互聯互通,異構系統能夠包括SMS(短信),MSNICQ等。基本的網絡形式是單客戶端經過TCP/IP鏈接到單服務器,而後在之上傳輸XML。socket

功能:測試

      傳輸的是與即時通信相關的指令。在之前這些命令要麼用2進制的形式發送(好比QQ),要麼用純文本指令加空格加參數加換行符的方式發送(好比MSN)。而XMPP傳輸的即時通信指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。優化

 

一句話總結就是一個能夠用於IM功能的協議,傳輸的是xml數據spa

 

移動端IM大概有如下這些方案,但不只於這些.net

1.第三方平臺xml

好比環信,融雲,leancloud,容聯雲等等。直接使用sdk就能夠實現了,最簡單最直接,並且穩定性已經不錯了,連UI界面都帶有了,能夠自行修改,缺點是要收費,好比環信日活躍用戶30萬以上開始收費,融雲基礎功能不收費,VIP級別的功能要收費。若是讓我選應該會在環信和融雲之間選,環信的話一個是市場佔有率比較大,二個是技術客服基本都能找到在線的,融雲客服的話須要像寫郵件同樣找技術解決問題,不是在線的交流,我以爲挺很差的,融雲的demo卻是作得比環信好看,環信的看上去很粗糙的感受。據使用過的朋友反饋融雲sdk比較好接入,環信稍微麻煩點,使用的時候都會有一些坑的地方要處理。

 

2.Spark+smack+openfire套餐

安卓使用asmack,測試使用spark,服務器使用openfire。asmack能夠說是smack的Android平臺的支持版提供xmpp協議的實現,就是一些個api,spark就是一個能夠用來在pc相互同信的客戶端,openfire部署也比較簡單,next,next就差很少了。這套方案還算比較成熟的了,固然沒有第三方的方便,工做量也增多了,這套也是基於xmpp協議同時也就有xmpp協議的一些缺點。

 

3.使用第三方推送的sdk

利用推送的及時性來作im也是能夠的,推送也不收費吧。

 

4.Socket長連接

socket你們都懂了的,感受作個小東西還能夠,可是正真商用要作的處理仍是挺多的,網絡優化,穩定性等等。

 

5.基於xmpp本身作

xmpp協議原本就是能夠坐im功能的,據瞭解環信就是本身基於xmpp來作的,50人上下的團隊14年開始作的,如今兩年左右已經融了兩三輪資了。不過xmpp基於xml,冗長直接致使費流量費電,特別是移動端,能夠考慮在傳輸的時候本身加一層二進制協議,若是環信真是xmpp來作應該也會在這方面作優化的。還有mqtt,sip等協議也是能夠本身作。若是im不是核心功能不推薦本身作,費時費力。

相關文章
相關標籤/搜索