這裏有必要普及一下xmpp是個什麼東西?android
引用某孃的定義:api
XMPP是一種基於標準通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的發展性。所以,基於XMPP的應用具備超強的可擴展性。通過擴展之後的XMPP能夠經過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端創建如內容發佈系統和基於地址的服務等應用程序。並且,XMPP包含了針對服務器端的軟件協議,使之能與另外一個進行通話,這使得開發者更容易創建客戶應用程序或給一個配好系統添加功能。服務器
網絡結構:網絡
XMPP中定義了三個角色,客戶端,服務器,網關。通訊可以在這三者的任意兩個之間雙向發生。服務器同時承擔了客戶端信息記錄,鏈接管理和信息的路由功能。網關承擔着與異構即時通訊系統的互聯互通,異構系統能夠包括SMS(短信),MSN,ICQ等。基本的網絡形式是單客戶端經過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不是核心功能不推薦本身作,費時費力。