開發社交應用的利器——Ejabberd一瞥

abel_cao發表於2015-04-06

版權宣告:本文為半吊子子全棧工匠(wireless_com,同公眾號)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/44899559

Erlang在社交應用中的地位突顯,自己搭一個大容量高併發的IM伺服器變得不那麼遙不可及了。Ejabberd 正是這樣一個不錯的選擇,至少是一個很棒的參考。對於一個4核16G記憶體的伺服器,單個Ejabberd節點可以支援30萬的IM使用者。

 

ejabberd是基於Jabber/XMPP協議的即時通訊伺服器,由GPLv2授權(免費和開放原始碼),採用Erlang/OTP開發。它的特點是跨平臺,容錯,叢集和模組化。

 

XMPP是由IETF制定的一個可擴充套件的即時訊息通訊協議。XMPP基本有兩部分組成,一部分是它的核心協議,還有一部分是擴充套件協議。其中核心協議主要由RFC-6120、RFC-6121、RFC-6122組成。還有一堆的擴充套件協議,具體可以參見XMPP官網擴充套件協議列表部分。一般會使用到的擴充套件協議包括XEP-0160 XEP-0013離線訊息處理、XEP-0045多使用者聊天、XEP-0096檔案傳輸。Smack是Java語言寫的XMPP Library,貌似Java中較好的XMPP客戶端了。

 

Ejabberd 的系統架構如圖所示:(http://docs.ejabberd.im/architect/

 

 

Ejabberd 支援的主要功能有:

l  點對點訊息One-to-onemessaging

l  儲存轉發Store-and-forward(offline messages)

l  通訊錄和狀態顯示

l  群聊

l  訊息備檔管理

l  線上狀態擴充套件:Personal Event Protocol (PEP)和輸入狀態指示

l  隱私設定

l  支援vCards的使用者資料

l  基於 BOSH 和 websockets的web支援

l  面向移動裝置的流式管理(aka XEP-0198)

l  訊息傳送回執(akaXEP-184)

l  最後的訊息活動

l  命令列管理工具……

 

Ejabberd既可以使用Mnesia作為資料庫,也可以是Mysql等。基於良好的可擴充套件性,ejabberd同樣支援SIP和WebRTC。


相關文章