【XMPP協議】開發Android即時通訊APP之瞭解XMPP(一)

目前正在忙公司項目,製作基於XMPP的即時通訊APP,爲此必須先了解下XMPP協議,所以寫篇博客加深下印象。
關於XMPP協議的相關介紹:
XMPP(Extensible Messageing and Presence Protocol:可擴展消息與存在協議)是目前主流的四種IM(IM:instant messaging,即時消息)協議之一,其他三種分別爲:即時信息和空間協議(IMPP)、空間和即時信息協議(PRIM)、針對即時通訊和空間平衡擴充的進程開始協議SIP(SIMPLE)。
在這四種協議中,XMPP是最靈活的。XMPP是一種基於XML的協議,它繼承了在XML環境中靈活的發展性。因此,基於XMPP的應用具有超強的可擴展性。經過擴展以後的XMPP可以通過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內容發佈系統和基於地址的服務等應用程 序。而且,XMPP包含了針對服務器端的軟件協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能。
XMPP的前身是Jabber,一個開源形式組織產生的網絡即時通信協議。XMPP目前被IETF國際標準組織完成了標準化工作。標準化的核心結果分爲兩部分; 核心的XML流傳輸協議 基於XML流傳輸的即時通訊擴展應用 XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網絡通信協議更規範的平臺上。藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。 XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性。
XMPP中定義了三個角色,客戶端,服務器,網關。通信能夠在這三者的任意兩個之間雙向發生。服務器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網關承擔着與異構即時通信系統的互聯互通,異構系統可以包括SMS(短信),MSN,ICQ等。基本的網絡形式是單客戶端通過TCP/IP連接到單服務器,然後在之上傳輸XML。
舉個例子看看所謂的XML流是什麼樣子的?

客戶端:<?xml version='1.0'?>
  <stream:stream
  to='example_com'
  xmlns='jabber:client'
  xmlns:stream='http_etherx_jabber_org/streams'
  version='1.0'>
  服務器:<?xml version='1.0'?>
  <stream:stream
  from='example_com'
  id='someid'
  xmlns='jabber:client'
  xmlns:stream='http_etherx_jabber_org/streams'
  version='1.0'>
  ...其他通信...
  客戶端:<message from='juliet_example_com'
  to='romeo_example_net'
  xml:lang='en'>
  客戶端: <body>Art thou not Romeo, and a Montague?</body>
  客戶端:</message>
  服務器:<message from='romeo_example_net'
  to='juliet_example_com'
  xml:lang='en'>
  服務器:<body>Neither, fair saint, if either thee dislike.</body>
  服務器:</message>
  客戶端:</stream:stream>
  服務器:</stream:stream> 

XMPP通過TCP傳什麼了?
傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進制的形式發送(比如QQ),要麼用純文本指令加空格加參數加換行苻的方式發送(比如MSN)。而 XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發和查錯。而 XMPP的核心部分就是一個在網絡上分片斷髮送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網絡基礎協議。所以可以說,XMPP用TCP傳的是XML流。

XMPP的特點:

  1. 客戶端/服務器通訊模式
  2. 分佈式網絡
  3. XML數據格式

同時XMPP也是存在不足的地方:

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

服務器端:
openFire
客戶端:
Smack

關於OpenFire
Openfire 採用Java開發,開源的實時協作(RTC)服務器基於XMPP(Jabber)協議。您可以使用它輕易的構建高效率的即時通信服務器. Openfire安裝和使用都非常簡單,並利用Web進行管理。單臺服務器可支持上萬併發用戶。由於是採用開放的XMPP協議,您可以使用各種支持XMPP協議的IM客戶端軟件登陸服務.

關於Smack
Smack是一個開源,易於使用的XMPP(jabber)客戶端類庫。Smack API, 是一個 Java 的XMPP Client Library,也是由Jive Software開發。 優點:編程簡單。 缺點:API並非爲大量併發用戶設計,每個客戶要1個線程,佔用資源大,1臺機器只能模擬有限(數千個)客戶.smack是一個用 java 寫的XMPP客戶端代碼庫, 是 spark 的核心.

發佈了70 篇原創文章 · 獲贊 196 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章