開源Jabber(XMPP) IM服務器介紹


一.摘要

這是我粗略讀了一遍Jabber協議和相關技術文章后的產物,有些地方不一定准確。在文章中引用的一些代碼來自 www.jabber.org上的文章。

二. 什么是Jabber
    Jabber就像ICQ,MSN一樣,是一個基於Internet的即時通訊系統,但是同這些即時通訊軟件不同的是,它是一個開放的即時通訊系統,也是一 個基於XML Stream 的協議,用於在Internet上的兩個實體之間交換信息,現場狀態(presence)和其他的結構化信息。你可以自己架設自己的Jabber服務器, 使用不同的Jabber Client 軟件,而不象ICQ或MSN一樣,依賴於AIM或MSN的服務器和軟件。
  第一個Jabber技術在 1998由Jeremie Miller 開發,到目前為止,Internet上已經有數以萬計的Jabber服務器和數以百萬的Jabber用戶。IETF已經將Jabber定為即時通訊和現場 技術的標准協議,稱為XMPP(Extensible Messaging and Presence Protocol),相關的規范是RFC3920和RFC3921,並且,JSF(Jabber Software Foundations)也在它的JEP中制定了更多擴展協議(例如GroupChat和文件傳輸等),這些擴展協議目前還沒有成為標准,但是將來有成為 標准的可能。
  作為一個標准協議,目前有大量的基於各種語言,各種平台,和各種 license (商業,GPL, Apache )和Open Source的Jabber服務器和Client端被開發出來,同時還有大量的Library,在這些Library的基礎上,大家可以自己開發自己的 Jabber應用。
    更多的信息,請看 www.jabber.org
三. Jabber的使用
    Jabber使用同其他的即時通訊軟件差不多,你根據你的平台,下載一個Jabber的Client (例如windows 下的Exodus, linux下的Gabber, PSI等),在Internet上尋找一個Jabber服務器(例如Jabber.cn),注冊一個帳號,然后再通訊列表 中加入你的好友,就可以開始聊天了。你也可以自己架設一個自己的Jabber服務器,這需要先下載相應的Jabber服務器軟件(例如Jive, Jabberd等),安裝配置后,把這個服務器的地址告訴你的朋友,你們就可以擁有一個自己的即時通訊服務器了。
  Jabber可以實現不同即時通訊軟件之間互聯互通。例如,通過一個Jabber Client,你可以用你的MSN或ICQ帳號,通過Jabber網關登陸到MSN或ICQ 服務器上,和你的MSN和ICQ好友進行通訊。
    在實時通訊的功能上,Jabber同其他的即時通訊軟件沒有什么太大的不同,普通的即時通訊;群組聊天,好友列表的分類,上線提醒等,這些功能隨着具體Jabber Client軟件的不同而略有不同,但大體上都是差不多的。
四. Jabber的架構
    Jabber從結構上來,更類似於一個郵件服務器,它是分布式的,也就是說,並不象其他即時通訊軟件那樣,所有的即時通訊用戶都連接到同一個服務器上,而是象郵件服務器那樣,不同的用戶連接到自己的服務器上,在服務器之間通過一個標准協議來交換信息
一個實體在Jabber網絡上被稱為一個接點,它有唯一的標識,被稱為JID,統稱用來表示一個Jabber用戶,但是也可以表示其他內容,例如一個聊天室。它的格式是 node@domain/resourcenode@domain有點類似電子郵件的地址格式,resource用來表示node不同的設備或位置,這個是可選的,例如我在Server1上注冊了一個用戶,用戶名為doom,那么我的JID就是 doom@server1, 在發送消息時,指明 doom@server1就可以了,resource可以不用指定,但我在登錄到這個Server時,我的JID可能是 doom@server1/exodus(如果我用Exodus軟件登錄),也可能是 doom@server1/psi(如果我用psi登錄)
   Jabber是一個典型的C/S 架構,而不是象大多數即時通訊軟件一樣,使用P2P的架構,也就是說在大多數情況下,在兩個Client進行通訊時,他們的消息都是通過Server傳遞 的(也有例外,例如在兩個Client傳輸文件時)。采用這種架構,是為了簡化Client端,將大多數工作放在Server段進行,這樣,Client 端的工作就比較簡單,而且,當增加功能時,多數是在Server端進行。
  Jabber是一套基於XML Stream的協議,當一個Jabber Client連接到一個Jabber Server上時,Client建立了一個從Client到Server的XML流,Server也同時建立了一個從XML到Server的XML流,這 個流看起來像這個樣子:
   |--------------------|
   |            |
   |--------------------|
   |          |
   |             |
   |         |
   |--------------------|
   | |
   |        |
   |      |
   |--------------------|
   |      |
   |        |
   |           |
   |--------------------|
   | ...             |
   |--------------------|
   |       | 所有的信息都是以XML格式加入到這個流中(這些信息被稱為stanzas),例如如下的消息:
 from='juliet@capulet.com'  to='romeo@montague.net'>
   Wherefore art thou, Romeo?
 
    因為是XML格式的數據,用戶可以自己對數據進行擴充,加入自己的基於XML的私有數據。
五. XMPP協議簡單介紹
   XMPP在2004年10 月被IETF認定為標准協議,它包括RFCS 3920和RFCS 3921,其中,3920被稱為Extensible Messaging and Presence Protocol (XMPP): Core,描述了Jabber 中XML Stream的核心技術,包括安全和國際化的一些技術; 3921被稱為Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence,主要是基於即時通訊的一些技術,例如通訊列表,黑名單等。
IETF還制定了兩個擴展協議,3922,被稱為Mapping the Extensible Messaging and Presence Protocol (XMPP) to Common Presence and Instant Messaging (CPIM);3923,被稱為 End-to-End Signing and Object Encryption for the Extensible Messaging and Presence Protocol (XMPP)。
同時,JSF還制定了一系列有關Jabber的擴展協議,稱為JEPS(Jabber Enhancement Proposals) ,用來制定一些Jabber的擴展功能,這些協議雖然還沒有稱為XMPP的一部分,但估計也是遲早的事情。
以下是XMPP中的一些需要特殊說明概念:
Message:Stream的一個子元素,,用來表示傳輸的消息,有一些相關屬性,例如to, from, type等,來表明發送方或接受方,它可以包括一些子元素,例如,等,當用戶發送一條信息時,就會在流的上下文中插入一個Message元素,中間有相關的信息。
Gateway: 用於把XMPP協議轉化為非XMPP協議,或將非XMPP協議轉化為XMPP協議,應用於Jabber同其他IM的通訊,或是其他系統,例如Email
Presence: Stream的一個子元素, 用來表明用戶的狀態,如在線,離線等,當用戶離線或改變自己的狀態時,就會在stream的上下文中插入一個Presence元素,來表明自身的狀態。
I/Q: Info/Query Stream的一個子元素,,一種請求/響應機制,從一個實體從發送請求,另外一個實體接受請求,並進行相應。例如,client在stream的上下文 中插入一個元素,向Server請求得到自己的好友列表,Server返回一個,里面是請求的結果。
Subscriptions: 訂閱機制,用來保證用戶可以管理訂閱指定用戶的Presence
TLS/SASL: Jabber的安全認證機制(這部分我沒有太看懂,大意是,在Client和Server,Server和Server進行通訊前,必須有一套安全機制進行認證,在經過認證后,才能進行通訊 TLS和SASL就是基於認證的兩種技術)
六. Jabber的發展趨勢
    我個人覺得,由於MSN,QQ,ICQ經過多年發展,已經擁有龐大的消費級終端用戶群,對這些用戶來說,Jabber高舉開放協議的大旗在這方面並沒有多 少優勢而言。同時在這些即時通訊軟件所上的附加功能越來越多(例如語音,視頻,游戲等),Jabber在這方面功能較弱。但是,我覺的在企業即時通訊和應 用領域,可能會有比較大的作為。目前的商業的Jabber軟件,針對的都是企業即時通訊服務。
    由於Jabber是基於XML的流傳輸協議,它更適合與傳輸結構化的信息,這樣,在企業的應用領域,會有比較大的發展前途,比較典型的就是,Jabber 已經作為COE(公共操作環境)的一部分,在美軍的FBS(Future Combat Systems)系統中提供服務,用於提供Chat服務和接受來自傳感器的戰場信息,使得實時信息可以單兵作戰平台,傳感器和其他資源間傳送。
    同時,由於Jabber跨平台的特性,已經出現了支持Jabber的IP電話和手持設備;有報道說,已經有公司在Jabber的基礎上開發訂閱/分發平台。
    正如Jabber 的創始人Jeremie Miller所希望的,Jabber將來可能更加用於實時的XML數據傳輸上,而不是僅僅作為一個即時通訊的平台。

七.常用開源Jabber
1. Openfire (Wildfire) 3.x
授權: GPL or 商用
操作系統平台:所有(使用Java開發)
XMPP Jabber 協議實現情況:98%
Tim 評價:
安裝和使用非常簡單,安裝后進入Web界面進行2~3分鍾的配置所有的東西都設好了。使用Java語言開發,在目前Java開發人員到處普及的情況下進行 維護和擴展的成本非常低。在我的測試中加上 Connection Manager 的情況下單台服務器可支持 30 萬並發用戶。缺點是目前還不支持cluster。如果企業內部部署IM使用 Wildfire + Spark 是最佳的組合。


2. ejabberd
授權: GPL
操作系統平台:Linux, Windows, MacOS X 等
XMPP Jabber 協議實現情況:91%
Tim 評價:
Ejabberd目前是可擴展性最好的一種Jabber/XMPP服務器,支持分布多個服務器,並且具有容錯處理,單台服務器失效不影響整個cluster運作。
顧慮就是它采用一種大家都沒聽過的語言Erlang開發,所以很多人可能會象我一樣因為這個原因放棄了它。

3. Jabberd 2.x
授權: GPL
操作系統平台:主要是 Linux, (Windows 也支持,但不知道性能怎樣)
XMPP Jabber 協議實現情況:76%
Tim 評價:
自從jabber.org改用ejabberd之后,Jabberd一直都在走下坡路。擴展性比不上ejabberd, 易用性比不上 Wildfire,唯一的優勢是使用C開發,如果你堅持要用C開發,那么還是選擇jabberd吧。

4. Jabberd 1.x
授權: GPL
操作系統平台:主要是 Linux, (Windows 也支持,但不知道性能怎樣)
XMPP Jabber 協議實現情況:45%
Tim 評價:
在幾年前 jabberd 就是 Jabber 的代名詞,至今很多 Jabber 文檔仍然介紹的是 Jabber 1.4,
在我以前寫的《Jabber 服務器占有率比較》中仍然排名第一。但是它很多新的規范都不支持,相信大部分用戶都將轉向新的服務器。


5. 后起之秀 DJabberd
授權: open source
操作系統平台:主要是 Linux, (Perl寫的,其他平台應該也支持)
XMPP Jabber 協議實現情況:N/A
Tim 評價:
djabberd 使用 epoll 技術,理論上單台服務器可以支持更多用戶。Djabberd目前主要應用在LiveJournal上,大部分XMPP協議都支持,穩定性也不用置疑。但是因為推出時間尚短,很多細節功能可能需要時間慢慢完善。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM