XMPP - 前言

“最淡的墨水勝過最強的記憶”

因為公司一直在趕項目,也有段時間沒有更新過文章了。閑下來想了還是寫點東西來做個總結(jié)(順便當備忘錄 = =)。

雖然現(xiàn)在用戶的移動社交基本還處于 QQ、微信 的壟斷時代,但 IM 功能現(xiàn)在已經(jīng)逐漸成為應用的標配。下面會大致說下我自己覺得比較重要的地方以及后續(xù)文章的大綱。

IM 協(xié)議的選擇

這一塊兒我覺得是開發(fā)者在進行開發(fā)前要慎重考慮的問題。不過相關的內(nèi)容其實網(wǎng)上已經(jīng)有不少優(yōu)質(zhì)的文章,在這里我就提供幾個鏈接不多做贅述。

《移動 IM 學習筆記》- Ruby客戶端
《簡述移動端IM開發(fā)的那些坑:架構(gòu)設計、通信協(xié)議和客戶端》- Segmentfault

首先說明下我們公司選擇的協(xié)議是 XMPP (不然也不會有這篇及之后的文章 = =)。

理由很簡單:

  • 開源、免費,可以用于商用,公司可以省去一部分開支(排除了使用第三方 SDK )
  • 公司團隊不大并且項目進度抓的時間緊(排除自己實現(xiàn)協(xié)議)
  • XMPP 協(xié)議存在時間已經(jīng)很長,網(wǎng)上的資料比較齊全

雖然我所在的公司最終決定使用 XMPP 協(xié)議(后面都簡稱 XMPP ),但依然不得不說在實際使用上有不少的坑要填。所以我提兩點建議:

  • 如果讀者所在公司準備開發(fā)的 App 不是聊天密集型,并且公司有條件或者讀者口才比較好能說服領導的話,建議還是選擇第三方 SDK
  • 公司團隊技術相對成熟,準備開發(fā)的 App 也是聊天密集型的,建議使用私有協(xié)議

如果你決定聽從我的建議,那么恭喜你不用入坑并且可以關掉窗口去查詢對應的資料了,因為后面的內(nèi)容都是基于使用 XMPP 展開的。

XMPP 的使用場景

大部分的協(xié)議在設計之初都會有一個預想的使用場景,然后開發(fā)人員根據(jù)這個預想的場景去制定一系列的規(guī)則。對于協(xié)議的使用者來說如果你的需求正好符合這個協(xié)議的預想場景,那么使用起來將會得心應手,反之就會處處掣肘。

那么對于 XMPP 協(xié)議來說,簡單分為倆部分:單人聊天多人聊天。
(具體代碼在之后的文章中貼出,這篇文章只做討論)

單人聊天

單人聊天的場景比較簡單,在社交軟件泛濫的今天可能連沒有學習過 IT 的大叔大媽們都能列出個一二三。

下面我就列舉部分XMPP 能夠快速實現(xiàn)單人聊天的功能:

  • 用戶登錄、注冊
  • 好友添加、刪除及分組
  • 個人名片(昵稱、頭像、住址等等)
  • 好友狀態(tài)檢測及通知(在線、離線)
  • 文件傳輸(照片、音頻)

多人聊天

多人聊天相比起單人聊天就要復雜的多了,不過總的來說還是能歸為倆種模式:會議模式群組模式。

會議模式群組模式 最大的區(qū)別在于人員的流動性

  • 會議模式 下的 稱之為 房間 更為恰當,用戶作為使用者的角色并不會一直存在房間中,這與我們平常意義上的群組是不同的。典型的使用案例:YY 、直播聊天室。
  • 群組模式 就不多做解釋了,典型使用案例:QQ 群 、微信群聊

XMPP 就是根據(jù) 會議模式 的使用場景去設計的,所以如果讀者的 App 是準備使用 XMPP 開發(fā)群組功能的話就要做好準備填坑了,當我們的總結(jié)寫到開發(fā)群聊功能的時候也會舉出一些我遇到的坑以及填坑的辦法。

下面列舉部分 XMPP 能夠快速實現(xiàn)多人聊天的功能:

  • 單人聊天的所有功能
  • 單人聊天轉(zhuǎn)多人聊天(需服務器支持)
  • 聊天室創(chuàng)建、銷毀
  • 聊天室信息編輯
  • 房客多級權限
  • 房客管理(禁言、邀請、刪除等)
  • 房客狀態(tài)變動通知(入群、離群、權限變更)

XMPP 服務器與客戶端通信實質(zhì)

XMPP 服務器與客戶端通信的實質(zhì)就是一串串 XML 代碼塊不斷傳遞解析的過程。一串 XML 相當于日常開發(fā)中的 接口 + 請求參數(shù)(如下圖)。

tongxun@2x.png

那么對于客戶端的開發(fā)者來說你要做的事情就明顯了:

  1. 去官網(wǎng)查詢對應功能模塊的標準 XML 格式
  2. 按照標準格式組裝 XML 串發(fā)送給服務器
  3. 接受服務器返回結(jié)果并按格式解析

這一段的內(nèi)容我覺得比較重要的原因是 iOS 端的 XMPPFrameWork 并沒實現(xiàn)所有協(xié)議中的功能,在實際使用過程中我們需要自己去實現(xiàn)對應協(xié)議的內(nèi)容(當然沒有實現(xiàn)的功能并不算多)。但幸運的是 XMPPFrameWork 框架把 XML 組裝和解析的方法封裝的非常靈活,我們可以很輕松的去實現(xiàn)。

下面附上文檔地址
英文文檔
中文翻譯

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容