XMPP
百度百科
1、什麼是XMPP ?
XMPP(可擴展消息處理現場協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線現場探測。它在促進服務器之間的準即時操作。這個協議可能最終允許因特網用戶向因特網上的其他任何人發送即時消息,即使其操作系統和瀏覽器不同。
XMPP的前身是Jabber,一個開源形式組織產生的網絡即時通信協議。XMPP目前被IETF國際標準組織完成了標準化工作。標準化的核心結果分爲兩部分;
核心的XML流傳輸協議
基於XML流傳輸的即時通訊擴展應用
XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網絡通信協議更規範的平臺上。藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。
XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性。
XMPP的擴展協議Jingle使得其支持語音和視頻。
2、XMPP的基本網絡結構是怎樣的?
XMPP中定義了三個角色,客戶端,服務器,網關。通信能夠在這三者的任意兩個之間雙向發生。服務器同時承擔了客戶端信息記錄,連接管理和信
息的路由功能。網關承擔着與異構即時通信系統的互聯互通,異構系統可以包括SMS(短信),MSN,ICQ等。基本的網絡形式是單客戶端通過TCP/IP
連接到單服務器,然後在之上傳輸XML。
3、XMPP通過TCP傳什麼了?
傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進制的形式發送(比如QQ),要麼用純文本指令加空格加參數加換行苻的方式發送(比如
MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發
和查錯。而XMPP的核心部分就是一個在網絡上分片斷髮送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一
步利用的網絡基礎協議。所以可以說,XMPP用TCP傳的是XML流。
4、舉個例子看看所謂的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='[email protected]'
to='[email protected]'
xml:lang='en'>
客戶端: <body>Art thou not Romeo, and a Montague?</body>
客戶端:</message>
服務器:<message from='[email protected]'
to='[email protected]'
xml:lang='en'>
服務器:<body>Neither, fair saint, if either thee dislike.</body>
服務器:</message>
客戶端:</stream:stream>
服務器:</stream:stream>
以文檔的觀點來看,客戶端或服務器發送的所有XML文本連綴在一起,從<stream>到</stream>構成了
一個完整的XML文檔。其中的stream標籤就是所謂的XML
Stream。在<stream>與</stream>中間的那些<message>...<
/message>這樣的XML元素就是所謂的XML
Stanza(XML節)。XMPP核心協議通信的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,中間通信過程就是客戶端發送XML
Stanza,一個接一個的。服務器根據客戶端發送的信息以及程序的邏輯,發送XML
Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從一個方發信給另外一方。通信的最後階段是</stream>關閉
流,關閉TCP/IP連接。
可以到http://xmpp.org/
查詢XMPP的介紹和文檔
非常不巧的是,當我寫這篇BLOG的時候,XMPP中文翻譯計劃網站http://www.jabbercn.org/
正在更新,網站管理員稱原有的數據稍後將轉入新wiki中。
當前主流操作系統下的XMPP客戶端實現有:
Apple MacOS
Adium
iChat
Console
centericq
Fama IM
GNU Freetalk
mcabber
Cross-Platform (Linux/Mac/Windows)
Coccinella
Jabbim
Jeti
Pidgin
Psi
Spark
Tkabber
Linux/Unix
Ayttm
BitlBee
Empathy
Gajim (also Windows)
Gossip
jabber.el
Kopete
Sim-IM
SIP Communicator
Microsoft Windows
Exodus
JAJC
Miranda IM
Pandion
Trillian Pro
Mobile Phone / PDA
Bombus
IM+
imov Messenger
Jabber Mix Client
Lampiro
mChat
OctroTalk
Talkonaut
Vayusphere
Web Browser
Claros Chat
iJab
Jabbear
JWChat
SamePlace
SparkWeb
TrophyIM
http://xmpp.org/software/clients.shtml
xmpp的服務器端實現:
Citadel
CommuniGate Pro
djabberd
ejabberd
IceWarp
iChat Server
in.jabberd
Isode M-Link
jabberd 1.x
jabberd 2.x
Jabber XCP
Jerry Messenger
Openfire
OpenIM
Prosody
psyced
Sun Java System Instant Messaging
Tigase
http://xmpp.org/software/servers.shtml
openfire
openfire是Jive Software的XMPP開源跨平臺服務端實現,擴展靈活,插件豐富,有非常好的社區支持,當前版本3.6.2。在以後的文章中,我將逐漸介紹一些openfire的功能及二次開發。
*同時Jive Software還有非常棒的spark客戶端實現及smack開發包。
openfire最新版本下載http://www.igniterealtime.org/projects/openfire/index.jsp
轉自:http://hetylei.javaeye.com/blog/289854
XMPP簡介
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.