新聞中心

EEPW首頁 > 手機與無線通信 > 設(shè)計應(yīng)用 > 解析XMPP協(xié)議分析與應(yīng)用

解析XMPP協(xié)議分析與應(yīng)用

作者: 時間:2011-09-16 來源:網(wǎng)絡(luò) 收藏

是一種基于XML的,它繼承了在XML環(huán)境中靈活的發(fā)展性。因此,基于具有超強的可擴展性。經(jīng)過擴展以后的可以通過發(fā)送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內(nèi)容發(fā)布系統(tǒng)和基于地址的服務(wù)等程 序。而且,XMPP包含了針對服務(wù)器端的軟件,使之能與另一個進行通話,這使得開發(fā)者更容易建立客戶程序或給一個配好系統(tǒng)添加功能。XMPP(可擴展消息處理現(xiàn)場)是基于可擴展標記語言(XML)的協(xié)議,它用于即時消息(IM)以及在線現(xiàn)場探測。它在促進服務(wù)器之間的準即時操作。這個協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息,即使其操作系統(tǒng)和瀏覽器不同。XMPP的前身是Jabber,一個開源形式組織產(chǎn)生的網(wǎng)絡(luò)即時通信協(xié)議。XMPP目前被IETF國際標準組織完成了標準化工作。

本文引用地址:http://butianyuan.cn/article/155743.htm

  1 XMPP的地址和數(shù)據(jù)結(jié)構(gòu)

  1.1 實體地址

  XMPP整體框架如圖1所示。圖中,XMPP框架的各類實體(如XMPP客戶、服務(wù)器和網(wǎng)關(guān)等)的地址稱為甲吧地址(Jabber Identifier,JID)。JID惟一確定進行即時消息和在線狀態(tài)信息通信的獨立對象或?qū)嶓w,并可兼容其他即時通信系統(tǒng)(如MSN等)相應(yīng)的實體標識及其在線狀態(tài)信息。其語法規(guī)則為:[節(jié)點″@″] 域名[″/″資源],其中各個域的長度不能超過1 023 字節(jié),總長度最大為3 071字節(jié)。

  XMPP中定義了三個角色,客戶端,服務(wù)器,網(wǎng)關(guān)。通信能夠在這三者的任意兩個之間雙向發(fā)生。服務(wù)器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網(wǎng)關(guān)承擔著與異構(gòu)即時通信系統(tǒng)的互聯(lián)互通,異構(gòu)系統(tǒng)可以包括SMS(短信),MSN,ICQ等?;镜木W(wǎng)絡(luò)形式是單客戶端通過TCP/IP連接到單服務(wù)器,然后在之上傳輸XML。傳輸?shù)氖桥c即時通訊相關(guān)的指令。在以前這些命令要么用2進制的形式發(fā)送(比如QQ),要么用純文本指令加空格加參數(shù)加換行苻的方式發(fā)送(比如MSN)。而XMPP傳輸?shù)募磿r通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本。這不但使得容易了,人也容易閱讀了,方便了開發(fā)和查錯。而XMPP的核心部分就是一個在網(wǎng)絡(luò)上分片斷發(fā)送XML的流協(xié)議。這個流協(xié)議是XMPP的即時通訊指令的傳遞基礎(chǔ),也是一個非常重要的可以被進一步利用的網(wǎng)絡(luò)基礎(chǔ)協(xié)議。所以可以說,XMPP用TCP傳的是XML流。

  域名指定了實體連接的XMPP服務(wù)器。每個可用XMPP服務(wù)器都擁有一個完整域名,域名可在域名系統(tǒng)(DNS)中查找;節(jié)點可表示某用戶、一類應(yīng)用或某項服務(wù),所有節(jié)點都對應(yīng)一個精確的域名;資源用來識別屬于用戶的特殊對象(如設(shè)備或位置),允許一個用戶同時以多個資源與同一XMPP服務(wù)器連接。

  1.2 XMPP的數(shù)據(jù)結(jié)構(gòu)

  由于XMPP是基于XML的協(xié)議,因此用戶可根據(jù)自己的需要定義標記,表述幾乎任何一種結(jié)構(gòu)化數(shù)據(jù),并可方便地創(chuàng)建定制的應(yīng)用或增加功能。

  1.2.1 三個頂級XML元素

  XMPP定義的3個關(guān)鍵頂級XML元素為message/>、presence/>和iq/>(info/query),每個元素都可以通過屬性和名字空間包含大量數(shù)據(jù),其屬性和名字空間都是XMPP的組成部分。

  message/>元素用來包含2個XMPP實體間互相發(fā)送的消息內(nèi)容;presence/>元素表示實體可用性信息,可用性信息有“可用”和“不可用”2種;iq/>元素用來構(gòu)建2個實體間的會話,并且允許實體間來回傳送XML格式的請求和響應(yīng)以便取得或設(shè)置公共的用戶信息,如名字等。

  即時通信中名字沖突問題使用XML的命名空間特性來解決。XML命名空間定義了一種將XML中使用的元素和屬性與統(tǒng)一資源定位符(Uniform Resource Locator,URL)引用聯(lián)系起來對元素和屬性進行定義的方法?!〗y(tǒng)一資源定位符(URL)是用于完整地描述Internet上網(wǎng)頁和其他資源的地址的一種標識方法。Internet上的每一個網(wǎng)頁都具有一個唯一的名稱標識,通常稱之為URL地址,這種地址可以是本地磁盤,也可以是局域網(wǎng)上的某一臺計算機,更多的是Internet上的站點。簡單地說,URL就是Web地址,俗稱“網(wǎng)址”。

  1.2.2 XMPP的數(shù)據(jù)結(jié)構(gòu)

  從結(jié)構(gòu)上看,XMPP有3種數(shù)據(jù):XML流、流認證和XML節(jié)。XML流是實體交換XML元素的容器,以stream>開始,以/stream>結(jié)束,是通信雙方采用異步方式進行數(shù)據(jù)傳輸?shù)臉藴史椒?,在整個XMPP通信過程中處于最外層;XML節(jié)是實體通過XML流傳輸?shù)慕Y(jié)構(gòu)化信息單元,在XML流中以深度為1的子標記開頭,并以深度為1的子標記結(jié)束,這些標記為message/>、presence/>和iq/>。

  XMPP為XML流扮演通用“傳輸層”的角色。XML流中包含傳輸?shù)恼J證信息和現(xiàn)場消息,XMPP能使數(shù)據(jù)高效路由至最合適的請求源,并最大限度地簡化客戶機上的實現(xiàn),使跨應(yīng)用實時交流信息成為可能。

  2 工作過程

 ?。?)節(jié)點(如yb、pt)向本地服務(wù)器連接。

  ①XMPP用戶通過開啟一個從客戶端到服務(wù)器端的XML流,來申請一個在服務(wù)器上的Socket連接。

  SEND: stream:stream

  to=′sdpt.com′

  xmlns=′jabber:client′

  xmlns:stream=′http://etherx.jabber.org/streams′>

 ?、诜?wù)器通過開啟一個從服務(wù)器到客戶端的XML流進行回復(fù)。

  RECV: stream:stream

  from=′sdpt.com′

  id=′180763465′

  xmlns=′jabber:client′

  xmlns:stream=′http://etherx.jabber.org/streams′>

  (2)節(jié)點向本地服務(wù)器申請登錄。

 ?、儆脩粼儐柕卿浄?wù)器時需提供的信息。

  SEND: iq id=′2′ type=′get′>

  query xmlns=′jabber:iq:auth′>

  username>yb/username>

  /query>

  /iq>

 ?、诜?wù)器回應(yīng)用戶,告知用戶登錄所需要的信息。

 ?、塾脩籼峁┧璧男畔ⅰ?/p>

 ?、芊?wù)器響應(yīng)一個空的類型為“result”的iq元素,表明登錄成功。

  RECV:iq id=′3′ type=′result′/>

 ?、輞b用戶發(fā)送當前狀態(tài)給服務(wù)器,表明其在線。

  SEND: presence>

  status>Online/status>

  /presence>

 ?。?)用戶獲得花名冊,好友增加一個聯(lián)系人(如yb獲知朋友sd在線)。

 ?。?)用戶間發(fā)送消息(如yb向sd發(fā)送消息)。

  用戶發(fā)送一條消息:

  SEND: message to′sd@jabber.org′>

  body>Where are you?/body>

  /message>

  服務(wù)器會根據(jù)XMPP用戶的會話信息加上一個源地址,這樣接收者收到消息時,消息中已經(jīng)包含了源地址。

 ?。?)XMPP服務(wù)器根據(jù)目標JID中的域名查找、連接到目標服務(wù)器并進行認證(如sdpt.com使用DNS查找jabber.org,連接到j(luò)abber.org服務(wù)器上并進行認證)。

  (6)XMPP服務(wù)器jabber.org證實sd連接到該服務(wù)器上,yb被授權(quán)與sd進行通信。

 ?。?)數(shù)據(jù)在yb與sd間流動。

  (8)用戶退出,退出時只需要關(guān)閉stream>。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉