XMPP協議的原理介紹

2021-06-16 20:07:10 字數 2812 閱讀 5323

xmpp是乙個典型的c/s架構,而不是像大多數即時通訊軟體一樣,使用p2p客戶端到客戶端的架構,也就是說在大多數情況下,當兩個客戶端進行通訊時,他們的訊息都是通過伺服器傳遞的(也有例外,例如在兩個客戶端傳輸檔案時).採用這種架構,主要是為了簡化客戶端,將大多數工作放在伺服器端進行,這樣,客戶端的工作就比較簡單,而且,當增加功能時,多數是在伺服器端進行.xmpp服務的框架結構如下圖所示.xmpp中定義了三個角色,xmpp客戶端,xmpp伺服器、閘道器.通訊能夠在這三者的任意兩個之間雙向發生.伺服器同時承擔了客戶端資訊記錄、連線管理和資訊的路由功能.閘道器承擔著與異構即時通訊系統的互聯互通,異構系統可以包括sms(簡訊)、msn、icq等.基本的網路形式是單客戶端通過tcp/ip連線到單伺服器,然後在之上傳輸xml,工作原理是:

(1)節點連線到伺服器;(2)伺服器利用本地目錄系統中的證書對其認證;(3)節點指定目標位址,讓伺服器告知目標狀態;(4)伺服器查詢、連線並進行相互認證;(5)節點之間進行互動.

xmpp客戶端

xmpp 系統的乙個設計標準是必須支援簡單的客戶端。事實上,xmpp 系統架構對客戶端只有很少的幾個限制。乙個xmpp 客戶端必須支援的功能有:

1. 通過 tcp 套接字與xmpp 伺服器進行通訊;

2. 解析組織好的 xml 資訊包;

3. 理解訊息資料型別。

xmpp 將複雜性從客戶端轉移到伺服器端。這使得客戶端編寫變得非常容易,更新系統功能也同樣變得容易。xmpp 客戶端與服務端通過xml 在tcp 套接字的5222 埠進行通訊,而不需要客戶端之間直接進行通訊。

基本的xmpp 客戶端必須實現以下標準協議(xep-0211):

rfc3920 核心協議core

rfc3921 即時訊息和出席協議instant messaging and presence

xep-0030 服務發現service discovery

xep-0115 實體能力entity capabilities

xmpp伺服器

xmpp 伺服器遵循兩個主要法則:

l  監聽客戶端連線,並直接與客戶端應用程式通訊;

l  與其他 xmpp 伺服器通訊;

xmpp開源伺服器一般被設計成模組化,由各個不同的**包構成,這些**包分別處理session管理、使用者和伺服器之間的通訊、伺服器之間的通訊、dns(domain name system)轉換、儲存使用者的個人資訊和朋友名單、保留使用者在下線時收到的資訊、使用者註冊、使用者的身份和許可權認證、根據使用者的要求過濾資訊和系統記錄等。另外,伺服器可以通過附加服務來進行擴充套件,如完整的安全策略,允許伺服器元件的連線或客戶端選擇,通向其他訊息系統的閘道器。

基本的xmpp 伺服器必須實現以下標準協議

rfc3920 核心協議core

rfc3921 即時訊息和出席協議instant messaging and presence

xep-0030 服務發現service discovery

xmpp閘道器

xmpp位址格式

乙個實體在xmpp網路結構中被稱為乙個接點,它有唯一的標示符jabber identifier(jid),即實體地址,用來表示乙個jabber使用者,但是也可以表示其他內容,例如乙個聊天室.乙個有效的jid包括一系列元素:(1)網域名稱(domain identifier);(2)節點(node identifier);(3)源(resource identifier).它的格式是

node@domain/resource,node@domain,類似電子郵件的位址格式.domain用來表示接點不同的裝置或位置,這個是可選的,例如a在server1上註冊了乙個使用者,使用者名為doom,那麼a的jid就是doom@serverl,在傳送訊息時,指明doom@serverl就可以了,resource可以不用指定,但a在登入到這個server時,fl的jid可能是doom@serverl、exodus(如果a用exodus軟體登入),也可能是doom@serverl/psi(如果a用psi軟體登入).資源只用來識別屬於使用者的位置或裝置等,乙個使用者可以同時以多種資源與同乙個xmpp伺服器連線。

xmpp訊息格式

xmpp中定義了       3個頂層xml元素: message、presence、iq,下面針對這三種元素進行介紹。

to :標識訊息的接收方。

from : 指傳送方的名字或標示(id)o

text: 此元素包含了要提交給目標使用者的資訊。

結構如下所示:

[email protected]/contact』 type =』chat』>

你好,在忙嗎

用來表明使用者的狀態,如:online、away、dnd(請勿打擾)等。當使用者離線或改變自己的狀態時,就會在stream的上下文中插入乙個presence元素,來表明自身的狀態.結構如下所示:

元素可以取下面幾種值:

probe :用於向接受訊息方法傳送特殊的請求

subscribe:當接受方狀態改變時,自動向傳送方傳送presence資訊。

< iq >

一種請求/響應機制,從乙個實體從傳送請求,另外乙個實體接受請求,並進行響應.例如,client在stream的上下文中插入乙個元素,向server請求得到自己的好友列表,server返回乙個,裡面是請求的結果.

主要的屬性是type。包括:

get :獲取當前域值。

set :設定或替換get查詢的值。

result :說明成功的響應了先前的查詢。

error: 查詢和響應中出現的錯誤。

結構如下所示:

XMPP協議實現原理介紹

本文介紹xmpp協議原理及相關資訊。xmpp協議簡介 xmpp extensible messageing and presence protocol 可擴充套件訊息與存在協議 是目前主流的四種im im instant messaging,即時訊息 協議之一,其他三種分別為 即時資訊和空間協議 i...

XMPP協議實現原理介紹

本文介紹xmpp協議原理及相關資訊。xmpp協議簡介 xmpp extensible messageing and presence protocol 可擴充套件訊息與存在協議 是目前主流的四種im im instant messaging,即時訊息 協議之一,其他三種分別為 即時資訊和空間協議 i...

XMPP協議實現原理介紹

本文介紹xmpp協議原理及相關資訊。xmpp協議簡介 xmpp extensible messageing and presence protocol 可擴充套件訊息與存在協議 是目前主流的四種im im instant messaging,即時訊息 協議之一,其他三種分別為 即時資訊和空間協議 i...