接着上一篇文章繼續學習和總結。。node
XMPP 系統的一個設計標準是必須支持簡單的客戶端。事實上,XMPP 系統架構對客戶端只有不多的幾個限制。一個XMPP 客戶端必須支持的功能有:安全
至於對客戶端爲什麼要求如此簡單,歸納來講就是,xmpp把相關更多功能實現都放在了服務器端去實現和處理,這樣使得客戶端相對解放出來。。這使得客戶端編寫變得很是容易,更新系統功能也一樣變得容易。服務器
XMPP 客戶端與服務端經過XML 在TCP 套接字的5222 端口進行通訊,而不須要客戶端之間直接進行通訊。
基本的XMPP 客戶端必須實現如下標準協議(XEP-0211):markdown
XMPP 服務器遵循兩個主要法則:網絡
不要小看它只需遵循的原則少,這兩個原則是全部xmpp服務器的核心與根本,否則,基於xmpp的im根本無從談起,更別說基於此的模塊化擴展了…架構
XMPP開源服務器通常被設計成模塊化,由各個不一樣的代碼包(模塊/組件)構成,這些代碼包包括但不限於如下:dom
另外,服務器能夠經過附加服務來進行擴展,如完整的安全策略,容許服務器組件的鏈接或客戶端選擇,通向其餘消息系統的網關。ide
基本的XMPP 服務器必須實現如下標準協議模塊化
XMPP 突出的特色是能夠和其餘即時通訊系統交換信息和用戶在線情況。因爲協議不一樣,XMPP 和其餘系統交換信息必須經過協議的轉換來實現,目前幾種主流即時通訊協議都沒有公開,因此XMPP 服務器自己並無實現和其餘協議的轉換,但它的架構容許轉換的實現。實現這個特殊功能的服務端在XMPP 架構裏叫作網關(gateway)。目前,XMPP 實現了和AIM、ICQ、IRC、MSN Massager、RSS0.9 和Yahoo Massager 的協議轉換。因爲網關的存在,XMPP 架構事實上兼容全部其餘即時通訊網絡,這無疑大大提升了XMPP 的靈活性和可擴展性。學習
從這個角度來說,xmpp網關就是xmpp向外暴露了一個能夠兼容其餘主流通信協議的一個接口(某種意義上來講)基於此,咱們能夠本身實現相應的通訊協議來實現xmpp與本協議的相互轉換和通訊,相似於一個充電器的轉換接口,能夠適配不一樣類型的手機同樣。
一個實體在XMPP網絡結構中被稱爲一個接點,它有惟一的標示符jabber identifier(JID),即實體地址,用來表示一個Jabber用戶,可是也能夠表示其餘內容,例如一個聊天室.
一個有效的JID包括一系列元素:
它的格式是node@domain/resource,node@domain,相似電子郵件的地址格式.domain用來表示接點不一樣的設備或位置,這個是可選的,例如a在Server1上註冊了一個用戶,用戶名爲doom,那麼a的JID就是doom@serverl,在發送消息時,指明doom@serverl就能夠了,resource能夠不用指定(是可選的),但a在登陸到這個Server時,a的JID多是doom@serverl/exodus(若是a用Exodus軟件登陸),也多是doom@serverl/psi(若是a用psi軟件登陸).資源只用來識別屬於用戶的位置或設備等,一個用戶能夠同時以多種資源與同一個XMPP服務器鏈接。
XMPP中定義了3個頂層XML元素: Message、Presence、IQ
Message
用於在兩個jabber用戶之間發送信息。Jsm(jabber會話管理器)負責知足全部的消息,無論目標用戶的狀態如何。若是用戶在線jsm當即提交;不然jsm就存儲。
To :標識消息的接收方。 from : 指發送方的名字或標示(id)o Text: 此元素包含了要提交給目標用戶的信息
栗子:
<message to= ‘lily@jabber.org/contact’ type =’chat’>
<body> 你好,在忙嗎</body>
</message>
Presence
用來代表用戶的狀態,如:online、away、dnd(請勿打擾)等。當用戶離線或改變本身的狀態時,就會在stream的上下文中插入一個Presence元素,來代表自身的狀態.結構以下所示:
<presence>
From =‘lily @ jabber.com/contact’
To = ‘yaoman @ jabber.com/contact'
<status> Online </status>
</presence>
presence 元素能夠取下面幾種值:
Probe :用於向接受消息方發送特殊的請求
subscribe:當接受方狀態改變時,自動向發送方發送presence信息。
IQ
一種請求/響應機制,從一個實體從發送請求,另一個實體接受請求,並進行響應.例如,client在stream的上下文中插入一個元素,向Server請求獲得本身的好友列表,Server返回一個裏面是請求的結果.
iq 主要的屬性是type。包括:
結構以下所示:
<iq from =‘lily @ jabber.com/contact’id=’1364564666’ Type=’result’>
再一個例子:
Presence
用於肯定用戶的狀態。消息結構舉例以下(每一個 XML 的 node 還會有不少其餘 attribute,爲了簡單起見這裏省略,下同):
<presence from="abc@jabber.org/contact" to="def@jabber.org/contact">
<status>online</status>
</presence>
Message
用於在兩個用戶之間發送消息。消息結構舉例以下:
<message from="abc@jabber.org/contact" to="def@jabber.org/contact" type=「chat」>
<body>hello</body>
</message>
IQ
信息/請求,是一個請求-響應機制,管理XMPP服務器上兩個用戶的轉換,容許他們經過相應的XML格式進行查詢和響應。
<iq from="abc@jabber.org/contact"id=「id11」 type=「result」>
</iq>
下一篇文章再繼續學習和總結我這段時間閱讀xmpp協議核心文檔 RFC3920 核心協議Core 的過程當中遇到的問題和本身的理解。
jessonlv——呂國棟原創文章,轉載請註明出處:http://blog.csdn.net/jessonlv