一、定義
xmpp 是一種很類似於http協議的一種資料傳輸協議,它的過程就如同「解包裝--〉包裝」的過程,使用者只需要明白它接受的型別,並理解它返回的型別,就可以很好的利用xmpp來進行資料通訊。
xmpp的核心協議的定義使得xmpp能夠在乙個比以往網路通訊協議更規範的平台上。借助於xml易於解析和閱讀的特性,使得xmpp的協議能夠非常漂亮。
xmpp的擴充套件協議是根據ietf在這之前對即時通訊的乙個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如aim,qq等有功能完整,完善等先進性。
xmpp的官方文件是rfc 3920。
二、網路結構
xmpp中定義了三個角色,客戶端,伺服器,閘道器。通訊能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端資訊記錄,連線管理和資訊的路由功能。閘道器承擔著與異構即時通訊系統的互聯互通,異構系統可以包括sms(簡訊),msn,icq等。基本的網路形式是單客戶端通過tcp/ip連線到單伺服器,然後在之上傳輸xml。
注意,分屬於不同server的client之間要通訊的話,中間不能再經過其他server,這2個server必須直接通訊。對於xmpp來說,server不能象email server那樣,中間可以經過若干個server才能把郵件傳送到目的地。
2.1 xmpp客戶端
xmpp 系統的乙個設計標準是必須支援簡單的客戶端。事實上,xmpp 系統架構對客戶端只有很少的幾個限制。乙個xmpp 客戶端必須支援的功能有:
xmpp 將複雜性從客戶端轉移到伺服器端。這使得客戶端編寫變得非常容易,更新系統功能也同樣變得容易。xmpp 客戶端與服務端通過xml 在tcp 套接字的5222 埠進行通訊,而不需要客戶端之間直接進行通訊。
基本的xmpp 客戶端必須實現以下標準協議(xep-0211):
2.2 xmpp伺服器
xmpp 伺服器遵循兩個主要法則:
xmpp開源伺服器一般被設計成模組化,由各個不同的**包構成,這些**包分別處理session管理、使用者和伺服器之間的通訊、伺服器之間的通訊、dns(domain name system)轉換、儲存使用者的個人資訊和朋友名單、保留使用者在下線時收到的資訊、使用者註冊、使用者的身份和許可權認證、根據使用者的要求過濾資訊和系統記錄等。另外,伺服器可以通過附加服務來進行擴充套件,如完整的安全策略,允許伺服器元件的連線或客戶端選擇,通向其他訊息系統的閘道器。
基本的xmpp 伺服器必須實現以下標準協議
2.3 xmpp閘道器
三、系統特點
四、位址格式
xmpp的位址叫做jabberid(簡寫為jid),它用來標示xmpp網路中的各個xmpp實體。jid由三部分組成:domain,node identifier和resource。jid中domain是必不可少的部分。注意:domain和user部分是不分大小寫的,但是resource區分大小寫。
jid = [ node "@" ] domain [ "/" resource ]domain:通常指網路中的閘道器或者伺服器。domain = fqdn / address-literal
fqdn = (sub-domain 1*("." sub-domain))
sub-domain = (internationalized domain label)
address-literal = ipv4address / ipv6address
node identifier:通常表示乙個向伺服器或閘道器請求和使用網路服務的實體(比如乙個客戶端),當然它也能夠表示其他的實體(比如在多使用者聊天系統中的乙個房間)。
jid種類有:
例子:
[email protected]:表示伺服器jabber.org上的使用者stpeter。
room@service:乙個用來提供多使用者聊天服務的特定的聊天室。這裡 「room「 是聊天室的名字, 」service「 是多使用者聊天服務的主機名。
為了標示jid,xmpp也有自己的uri,例如xmpp:[email protected],預設規則是在jid前加xmpp:。
五、通訊原語
xmpp通訊原語有3種:message、presence和iq。
5.1 message
message是一種基本推送訊息方法,它不要求響應。主要用於im、groupchat、alert和notification之類的應用中。
主要屬性如下:
5.1.1type屬性,它主要有5種型別:
5.1.2to屬性:標識訊息的接收方。
5.1.3
載荷(payload):例如body,subject
例子:
你好,在忙嗎
5.2 presence
presence用來表明使用者的狀態,如:online、away、dnd(請勿打擾)等。當改變自己的狀態時,就會在stream的上下文中插入乙個presence元素,來表明自身的狀態。要想接受presence訊息,必須經過乙個叫做presence subscription的授權過程。
5.2.1 屬性:
5.2.1.1 type屬性,非必須。有以下類別
5.2.1.2 to屬性:標識訊息的接收方。
5.2.1.3 from屬性:指傳送方的名字或標示。
5.2.2 載荷(payload):
5.2.2.1 show:
5.2.2.3 priority:範圍-128~127。高優先順序的resource能接受傳送到bare jid的訊息,低優先順序的resource不能。優先順序為負數的resource不能收到傳送到bare jid的訊息。
例子:xa
down the rabbit hole!
5.3 iq (info / query)
一種請求/響應機制,從乙個實體從傳送請求,另外乙個實體接受請求,並進行響應。例如,client在stream的上下文中插入乙個元素,向server請求得到自己的好友列表,server返回乙個,裡面是請求的結果。
主要的屬性是type。包括:
例子:
備註:1、單詞縮寫:
2、參考資料
《xmpp協議的原理介紹》
《rfc3920》
《xmpp: the definitive guide》
XMPP協議學習
xmpp協議簡介 xmpp extensible messageing and presence protocol 可擴充套件訊息與存在協議 是目前主流的四種im im instant messaging,即時訊息 協議之一,其他三種分別為 即時資訊和空間協議 impp 空間和即時資訊協議 prim...
xmpp協議學習!!!
一 定義 xmpp 是一種很類似於http協議的一種資料傳輸協議,它的過程就如同 解包裝 包裝 的過程,使用者只需要明白它接受的型別,並理解它返回的型別,就可以很好的利用xmpp來進行資料通訊。xmpp的核心協議的定義使得xmpp能夠在乙個比以往網路通訊協議更規範的平台上。借助於xml易於解析和閱讀...
XMPP學習筆記
1.xmpp網路是由若干角色組成的,這些角色可以分為伺服器 客戶端 元件和伺服器外掛程式。3.xmpp流由兩份xml文件組成,通訊的每個方向均有乙份文件,這些文件有乙個頂級根元素,這個根元素的子元素由可路由的節以及與流相關的頂級子元素構成。三種基本節為 4.節裡的通用屬性 from to type ...