Android基於xmpp的即時通信應用

  xmpp是一個通訊協議。由於這是個開放的協議,爲了節儉開發成本,不少即時應用都採用了這個協議。Android上最經常使用的組合asmack +openfire。Asmack是smack的android版,是對xmpp協議進行了封裝,並提供了豐富的api,簡化了操做。Openfire是一個開源的IM服務器,基於Xmpp實現。換句話說使用xmpp開發即時通信應用的話,服務器端已經開發好了,就是openfire。html

 

        如今我作的一個android應用就是採用asmack+openfire。說實在的,xmpp協議太多了,大多都是英文的,去學這個東西成本高,可是若是不學,僅僅依賴openfire+asmack提供的功能很難知足多樣性的需求。Openfire由於是開源的,因此能夠進行插件開發或者二次開發去知足本身業務需求。xmpp還增長了Jingle擴展協議來支持面向鏈接的業務,如語音和視頻。java

        以前業界xmpp最典型的例子就是Google talk,並且以前Google一直力推xmpp協議。可是Google最新的IM軟件Hangouts並無採用xmpp協議,對這一作法Google也沒有一個明確的回答。Google這一作法的確下降的xmpp的熱度。另外不少人說xmpp傳輸效率低,xmpp使用xml格式數據進行通訊,過多的標籤的確可能下降傳輸效率。再說如今的國內主流的IM軟件,QQ,微信等,都是採用本身私有的通訊協議。Openfire採用的TCP鏈接,QQ採用TCP+UDP。android

        是開發本身的協議,是使用xmpp協議,仍是用封裝好的xmpp協議(smack)+現成的服務器(openfire)就是你們的決定了。不過要說的是三種方案靈活性依次下降,成本也依次下降。咱們項目的預算比較低因此採用了asmack+openfire。不過這裏我要說的是僅僅依賴asmack+openfire是知足不了常規的業務需求的。因此咱們的項目引入了webservice,同時嘗試對openfire進行插件開發。git

        這裏我能夠說說asmack+openfire開發遇到的一些無力的地方,好比:github

        用戶沒法接受離線的圖片,語音。web

        羣成員在離線後就會離開羣(細來講,smack沒有羣的概念,只有個聊天室)算法

        羣聊裏沒有辦法發圖片(點對點的時候發送圖片使用的是文件傳輸,只能一對一,不能一對多)api

 

        其餘的問題就不在細說。對於上述的問題會在後續的文章中分享本身的解決方案。服務器

Xmpp最大的優點是什麼,在我看來就是開源。這種開源可讓任意兩個使用xmpp協議的軟件進行通訊。微信

開發以前有必要了解一些xmpp的一些數據結構。Xmpp鏈接使用xml流,這個XML流至關於一個會話期間全部XML節的一個信封

 

  |--------------------|
  | <stream>           |
  |--------------------|
  | <presence>         |
  |   <show/>          |
  | </presence>        |
  |--------------------|
  | <message to='foo'> |
  |   <body/>          |
  | </message>         |
  |--------------------|
  | <iq to='bar'>      |
  |   <query/>         |
  | </iq>              |
  |--------------------|
  | ...                |
  |--------------------|
  | </stream>          |
  |--------------------|

 

上圖中的幾個節點 presence、message、IQ對應着asmack的3個對象。這些都是packet的子類。

 

        關於asmack的api,沒有找到單獨的asmack api,更沒有中文的。你們能夠再下載jar包的同時選擇下載源碼。Eclipse引用源碼後,經過javadoc就能夠看到接口說明了,和api無異。

 

 

asmack官網:https://github.com/Flowdalic/asmack

asmack下載地址:http://asmack.freakempire.de/

openfire下載地址:http://www.igniterealtime.org/downloads/index.jsp

smack使用指南:http://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html

下載openfire的同時,你們能夠下載Spark測試

 

更新2015-3-12

如今smack(4.1以上版本)已經能夠直接跑在Android平臺上了,之後asmack也沒有更新的必要了。此次smack作了針對Android平臺作了不少的優化,也是smack一次里程碑式的更新。

此外設計方案上用openfire+smack+webservice 也許是更優秀的方案。也就是說 只使用smack的通信功能,諸如好友關係,用戶資料這些東西都交給webservice去管理維護。

Smack參考:https://community.igniterealtime.org/blogs/ignite/2015/01/14/smack-410-beta1-available

相關文章
相關標籤/搜索