【XMPP】基於XMPP的即時通訊解決方案

Leo.cheng發表於2014-01-04

什麼是XMPP

  介紹XMPP之前,先來看看GTalk。

  GTalk是Google推出的IM(Instant Messaging,即時通訊)軟體,類似於QQ和MSN。

  從技術角度來說,GTalk與QQ和MSN的差異是使用了不同的通訊協議,QQ使用了自己的私有協議(未公開),MSN也使用了自己的私有協議。而GTalk使用了XMPP(Extensible Messageing and Presence Protocol,可擴充套件訊息與存在協議),這種通訊協議是一種公開的協議,有很多IM都使用了XMPP。

  XMPP是一種基於XML的協議,它繼承了XML的靈活性和可擴充套件性。因此,基於XMPP的應用也同樣具有超強的靈活性和可擴充套件性。

  1. 經過擴充套件後的XMPP可以通過傳送擴充套件的資訊來處理使用者的需求,以及在XMPP的頂端建立如內容釋出系統和基於地址的服務等應用程式。
  2. 而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一端進行通話,這使得開發者更容易建立客戶應用程式或給一個系統新增功能。

開發背景

國際背景

  隨著Internet技術的高速發展,即時通訊已經成為一種廣泛使用的通訊方式。

  1996年Mirabilis公司推出了世界上第一個即時通訊系統ICQ,不到10年間,即時通訊(Instant Messaging,簡稱IM)以發展成為了最流行的網路應用之一。

  特別是近幾年的迅速發展,即時通訊的功能日益豐富,不再是個單純的聊天工具,它已經發展成集交流、資訊、娛樂、音樂、電視、遊戲、電子商務等為一體的綜合化資訊平臺。

國內背景

  目前國內外及時通訊軟體IM(Instant Messenger )形勢風起雲湧,可謂戰況空前,IM作為繼Email和Web之後最主要的網際網路基礎應用之一,為商家必爭之地。

  國內的形勢由於QQ的壟斷性優勢明顯,表面稍顯平靜,實則暗流湧動。

  目前來看,胖企鵝公司以壓倒性優勢佔據了國內IM市場近八成份額,並且緊緊抓住低端市場,使用者數量龐大,盈利豐厚。其他的IM 微軟MSN(WLM)、網易POPO、新浪UC、TOM Skype、Google Gtalk等佔有率較為慘烈,還有雅虎即時通、AIM、ICQ以及傳聞中的Baidu IM和搜狐搜Q以及一些目前並不出名的如校內網的校內通,Lava-lava等等等等,凡在國內叫得上號的叫不上號的網際網路企業,幾乎沒有不推IM的,甚 至連中國移動都力推飛信,希望分得一杯羹。

  然而這些即時通訊不能實現互聯互通,限制了使用者的擴充套件。


為什麼選擇XMPP協議

  雖然現在即時通訊軟體有很多,但是它們之間不能互聯互通也阻礙了及時通訊使用者的繼續擴充套件。

  因此,在現階段的各種即時通訊服務,沒有統一的標準,無法實現互聯互通,而XMPP(Extensible Message and presence Protocol)協議的出現,實現了整個及時通訊服務協議的互通。

  有了這個協議之後,使用任何一個組織或者個人提供的即使通訊服務,都能夠無障礙的與其他的及時通訊服務的使用者進行交流。例如google 公司2005年推出的Google talk就是一款基於XMPP協議的即使通訊軟體。

  目前IM即時通訊有四種協議:

  1. 即時資訊和空間協議(IMPP)
  2. 空間和即時資訊協議(PRIM)
  3. 針對即時通訊和空間平衡擴充的程式開始協議SIP
  4. XMPP協議:該協議的前身是Jabber,採取XMPP協議族來實現IM主要是考慮XMPP協議是以XML為基礎的,它繼承了在XML環境中靈活的擴充套件性。

  這表明XMPP是可擴充套件的,所以XMPP資訊不僅可以是簡單的文字,而且可以攜帶複雜的資料和各種格式的檔案,也就是說XMPP協議不僅可以用在人與人之間的交流,而且可以實現軟體與軟體或軟體與人之間的交流,目前支援XMPP協議的即時通訊工具有Gtalk、FaceBook IM、Twitter、網易POPO等等通訊工具,具有非常好的發展情景。

  正如任何事物都有其自身的發展規律一樣,技術和產品的進步也有其自身的規律。

  從萌芽到混亂最終標準化,這是網際網路產品的基本規律。

  IM跟其實發展自Email,跟Email有著很多共同點。對比一下Email目前的情況,或許會有些啟示。

  Email現在已經被廣泛應用,誰都不能質疑其網際網路第二應用的地位(第一應用是Web)。

  Email之所以能廣泛地被應用最關鍵的原因應該是Email有一套開放標準的協議規範(包括SMTP、POP、IMAP 等),任何人都可以基於這些協議規範開放自己的Email產品,不管是Email伺服器也好,Email收發客戶端也罷還是現在頗為流行的Web形式的 Email介面,它們都是基於同一套標準。

  在這套標準的框架下,各個Email相關廠商都各自佔據產業鏈的相應位置,相互合作相互競爭,這才是一個百花齊放的健康競爭環境,而且這種健康競爭最終受益者還是廣大使用者。

  XMPP的基礎部分已經在2002-2004年得到了網際網路工程任務組(IETF)的批准, 這意味著XMPP在將來就像我們認為理所當然的Internet協議TCP/IP、HTTP、FTP、SMTP、POP一樣成為Internet標準;這意味著以後我們就像使用Web、使用Email和使用FTP一樣開放地使用IM。

  甚至若干年後人們會理所當然地認為163的郵箱可以給Hotmail發郵件一樣,QQ使用者也可以新增Gtalk使用者,人們會逐漸忘卻當年軍閥割據紛亂的歷史。這是一種革命性的進步!不支援XMPP的IM將會像IBM的 Token-Ring一樣孤芳自賞或者像DEC NET協議一樣被人遺忘。想當年DEC NET和IBM Token-Ring也是多麼意氣風發羽扇綸巾啊!

  在XMPP被批准之前,世界上已經存在了數十種支援XMPP的伺服器端和客戶端以及數百萬使用者。嗅覺靈敏的Google作為開放原始碼社群和開放標準的最大受益者,第一時間感受到了這種趨勢,所以花重金將Gaim的作者挖去Google,於是就有了基於XMPP的Gtalk。

  開放的標準協議會導致產品的競爭更為健康和良性,整個產業鏈更為完善。當然產品之間的競爭唯一的趨勢就是同質化,產品發展到後期比拼的只有服務。這一點在傳統產業已經被完全驗證,網際網路產業也不能逃脫。至於到時使用者是選Gtalk呢還是選POPO呢,就像使用者現在選Gmail還是163的郵箱一樣,可以各有所好。

  不過IM在擴充套件功能以及增值服務上還有非常大的競爭餘地。


Xmpp協議介紹

協議概述

  XMPP是一種基於XML的協議,它繼承了在XML環境中靈活的發展性。

  因此,基於XMPP的應用具有超強的可擴充套件性。經過擴充套件以後的XMPP可以通過傳送擴充套件的資訊來處理使用者的需求,以及在XMPP的頂端建立如內容釋出系統和基於地址的服務等應用程式。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程式或給一個配好系統新增功能。

  可擴充套件訊息處理現場協議(eXtensible Messaging and Presence Protocol , XMPP) 是一種基於可擴充套件標記語言(eXtensible Markup Language, XML)的近端串流式即時通訊協議。它將現場和上下文敏感資訊標記嵌入到XML 結構化資料中, 使得人與人之間、應用系統之間以及人與應用系統之間能即時相互通訊。

  XMPP 協議已被批准為網際網路即時通訊協議標準。

協議的網路架構

  XMPP中定義了三個角色,客戶端,伺服器,閘道器

  1. 通訊能夠在這三者的任意兩個之間雙向發生。
  2. 伺服器同時承擔了客戶端資訊記錄,連線管理和資訊的路由功能。
  3. 閘道器承擔著與異構即時通訊系統的互聯互通,異構系統可以包括SMS(簡訊),MSN,ICQ等。

  基本的網路形式是單客戶端通過TCP/IP連線到單伺服器,然後在之上傳輸XML。

  

 

  XMPP的特點是將複雜性從客戶端轉移到伺服器端。

  這使得客戶端編寫變得非常容易,更新系統功能也同樣變得容易。

協議優點

  1. 開放—XMPP協議是自由、開放、公開的,並且易於瞭解。而且在客戶端、伺服器、元件、原始碼庫等方面,都已經各自有多種實現。
  2. 標準—網際網路工程工作小組(IETF)已經將Jabber的核心XML流協議以XMPP之名,正式列為認可的實時通訊及Presence技術。而XMPP的技術規格已被定義在RFC 3920及RFC 3921。任何IM供應商在遵循XMPP協議下,都可與Google Talk實現連線。
  3. 證實可用—第一個Jabber(現在XMPP)技術是Jeremie Miller在1998年開發的,現在已經相當穩定;數以百計的開發者為XMPP技術而努力。今日的網際網路上有數以萬計的XMPP伺服器運作著,並有數以百萬計的人們使用XMPP實時傳訊軟體。
  4. 分散式XMPP網路的架構和電子郵件十分相像;XMPP核心協議通訊方式是先建立一個stream,XMPP以TCP傳遞XML資料流,沒有中央主伺服器。任何人都可以執行自己的XMPP伺服器,使個人及組織能夠掌控他們的實時傳訊體驗。
  5. 安全—任何XMPP協議的伺服器可以獨立於公眾XMPP網路(例如在企業內部網路中),而使用SASL及TLS等技術的可靠安全性,已自帶於核心XMPP技術規格中。
  6. 可擴充套件—XML名稱空間的威力可使任何人在核心協議的基礎上建造客製化的功能;為了維持通透性,常見的擴充套件有XMPP Standards Foundation。
  7. 彈性佳—XMPP除了可用在實時通訊的應用程式,還能用在網路管理、內容供稿、協同工具、檔案共享、遊戲、遠端系統監控等。
  8. 多樣性—用XMPP協議來建造及佈署實時應用程式及服務的公司及開放原始碼計劃分佈在各種領域;用XMPP技術開發軟體,資源及支援的來源是多樣的,使得使你不會陷於被“綁架”的困境。

協議缺點

  1. 資料負載太重:隨著通常超過70%的XMPP協議的伺服器的資料流量的存在和近60%的被重複轉發,XMPP協議目前擁有一個大型架空中存在的資料提供給多個收件人。新的議定書正在研究,以減輕這一問題。
  2. 沒有二進位制資料:XMPP協議的方式被編碼為一個單一的長的XML檔案,因此無法提供修改二進位制資料。因此, 檔案傳輸協議一樣使用外部的HTTP。如果不可避免,XMPP協議還提供了帶編碼的檔案傳輸的所有資料使用的Base64。至於其他二進位制資料加密會話(encrypted conversations)或圖形圖示(graphic icons)以嵌入式使用相同的方法。

Xmpp提供電子名片協議

  vCard是一種現存的、廣泛使用的,使用者個人資訊儲存的標準,有點像是電子名片。

  基礎的功能是儲存和獲取使用者的電子身份,該資訊是用XML表示的,資料的儲存取決於所有現存的Jabber伺服器的實現。

系統特點

  客戶機/伺服器通訊模式、分散式網路、簡單的客戶端、XML的資料格式。


 伺服器端介紹

 什麼是Openfire

  Openfire 採用Java開發,開源的實時協作(RTC)伺服器基於XMPP(Jabber)協議。您可以使用它輕易的構建高效率的即時通訊伺服器.

  Openfire安裝和使用都非常簡單,並利用Web進行管理。單臺伺服器可支援上萬併發使用者。

  由於是採用開放的XMPP協議,您可以使用各種支援XMPP協議的IM客戶端軟體登陸服務.

為什麼使用Openfire

  1. Openfire為Java開源專案
  2. 採用開放的XMPP協議
  3. 有多種針對不通系統的版本
  4. 使用Socket通訊
  5. 單臺伺服器可支援上萬併發使用者,搭建分散式雲伺服器可輕鬆提供大量併發使用者。
  6. Socket長連線
  7. 伺服器穩定
  8. 提供介面,可自己開發外掛

Windows下搭建伺服器

  JDK1.6 + Openfire For Windows + Mysql5.5 + Tomcat6

Linux下搭建伺服器

  JDK1.6 + Openfire For Linux + Mysql5.5 + Tomcat6


環境搭建

安裝JDK

  下載官網的JDk,並且正常安裝,待安裝完成後設定環境變數。

安裝OpenFire

  下載Openfire,並正常預設安裝。

安裝Mysql

  下載安裝Mysql,指定Mysql的使用者名稱和密碼,以及資料庫使用的編碼。確定是否允許遠端訪問該資料庫。

安裝Apach Tomcat

  下載Apach基金會下的Tomcat伺服器,並且解壓安裝。

配置環境

  登陸Openfire伺服器控制檯,設定相關的資訊。如:埠,外掛等。

  並將專案部署到Apach tomcat中。

安裝專案

  1. ForAndroid:從Tomcat中下載android的專案XmppClientForAndroid.apk,並在手機中安裝。
  2. ForPc:從Tomcat中下載Pc的專案 Spark.exe,並在手機中安裝。
  3. ForWeb:開啟Tomcat中的專案,直接執行登陸。

  點選執行

設定伺服器地址

  ForAndroid、ForPc、ForWeb 都提供了個伺服器地址設定的地方。預設Openfire的埠為5222.(除,Silverlight 的埠必須為 4502-4532)

註冊使用者

  可以在伺服器端直接註冊使用者,也可以在客戶端註冊使用者。

進行相對應的操作

  相對應的即時通訊方面的操作。

  環境搭建請參考:http://www.cnblogs.com/charley_yang/archive/2011/03/27/1997052.html


 

文章參考

  http://baike.baidu.com/link?url=uPBLWsmv5AL8jWF3vQ4Hhcif-YkhMZB0xfxNfWA56Vgdig0bI9gQudZUICpWkDJb

  http://www.cnblogs.com/charley_yang/category/277938.html

  http://www.cnblogs.com/luxiaofeng54/archive/2011/03/14/1984026.html

 

相關文章