xmpp協議
① XMPP協議 用的TCP協議 還是UDP 協議如何獲取上行消息 成功與否的回執
xmpp 使用的 tcp協議
② XMPP 協議適合用來做移動 IM 么
XMPP(Extensible Messaging and Presence Protocol,前稱Jabber)是一種以 XML 為基礎的開放式實時通信協議,關於它的協議細節,網上已經有太多分析文章,我這里就不再贅述(而且,我也不可能比別人解釋的更清楚)。簡單來看這個協議,我們只需要知道:
1,XMPP 的三種基本角色:客戶端、伺服器和網關,通信能夠在這三者的任意兩個之間雙向發生。伺服器端同時承擔了客戶端信息記錄、連接管理和信息路由的功能。網關則承擔著與異構系統的互聯互通功能。在 RFC 3920 XMPP Core 中對 XMPP 網路結構有一個描述:
C1----S1---S2—C3
|
C2----+--G1===FN1===FC1
這里 C1,C2,C3 表示 XMPP 客戶端;S1,S2 表示 XMPP 伺服器;G1 表示網關,用來負責 XMPP 協議和外部聊天協議的轉換;FN1 表示外部消息網路的伺服器,FC1 表示外部網路客戶端。
大家可能會奇怪,這里為什麼需要一個網關呢。這要從 XMPP 的來源說起。1996 年 Mirabilis 公司推出了世界上第一個即時通信系統 ICQ,不到 10 年,IM 就成了最流行的應用之一,MSN、Gtalk、雅虎即時通、AIM、Adium、Pidgin 等各種軟體如雨後春筍般涌現,但是這些服務之間沒有統一的標准,不能互聯互通,XMPP 的設計目的就是為了實現整個及時通信服務協議的互通,讓 IM 成為繼 WEB 和 Email 之後的互聯網第三大服務。
2,XMPP 的消息格式。
XMPP 協議的所有消息都是 XML 格式的,這是 XMPP 協議的另一個充滿歷史意味的選擇,想當年 SOA / SOAP 一時間爆發起來,很多消息交換協議都採用了 XML 格式,但是不想 XML 很快就成了「大數據」的代名詞。在 RFC 3920 XMPP Core 中定義了兩個基礎概念,XML Stream 和 XML Stanza,XML Stream 是兩個節點之間進行數據交換的容器,它定義了頂層的XML節點 ;XML Stanza 則定義了實體消息的具體語義單元,在 XMPP 中定義了 3 個頂層消息:
2.1 Presence
用於確定用戶的狀態。消息結構舉例如下(每個 XML 的 node 還會有很多其他 attribute,為了簡單起見這里省略,下同):
<presence from="[email protected]/contact" to="[email protected]/contact">
<status>online</status>
</presence>
2.2 Message
用於在兩個用戶之間發送消息。消息結構舉例如下:
<message from="[email protected]/contact" to="[email protected]/contact" type=「chat」>
<body>hello</body>
</message>
2.3 IQ
信息/請求,是一個請求-響應機制,管理XMPP伺服器上兩個用戶的轉換,允許他們通過相應的XML格式進行查詢和響應。
<iq from="[email protected]/contact" id=「id11」 type=「result」>
</iq>
3,XMPP 的交互流程。
XMPP 通過 TCP 傳輸了什麼內容?在 QQ 裡面,消息是使用二進制形式發送的,在 MSN 裡面是採用純文本指令加參數加換行符的形式發送的,而 XMPP 傳輸的即時通訊指令與他們相仿,只是協議的形式變成了 XML 格式的純文本,這讓解析更容易,方便了開發和查錯,但是也帶來了數據負載過重的缺點,而被人廣為詬病。
XMPP 聊天的過程如下:
所有從一個 client 到另一個 client 的消息和數據都要經過 XMPP Server;
client1 連接到Server;
server 利用本地目錄系統的證書對其認證;
client1 指定 client2 目標地址,讓 server 告知 client2 目標狀態;
server 查找,連接並進行互相認證;
client1 和 client2 進行交互。
XMPP 系統實測
XMPP 協議的最主要的一點就是開放,不管是協議、客戶端,還是 Server 端,都有成熟的實現方案。為了實際感受 XMPP 協議的聊天過程,我使用 asmack library + OpenFire 伺服器搭建了一套完整的測試環境。
OpenFire 採用 Java 開發,是一個基於 XMPP 協議 的開源的實時協作伺服器,它的安裝和使用都非常簡單,自帶有一個內置的存儲資料庫(當然,你也可以使用獨立資料庫如Mysql等),並利用 Web 進行管理。其他類似的開源系統還有很多,eJabber、Tigase 也經常被用到。但是根據我們之前的經驗,這些開源系統能支持的並發連接數都不高,要是有超過10萬的用戶同時連上來,對它們來說就快達到單機的瓶頸了,這時候一般都需要水平拆分,但是拆分之後伺服器之間的 session 同步負擔會大幅加重,對於性能又帶來不小的抵消。所以這些系統大都被拿來做研究和測試用,很少見到大規模在生產環境中使用的。
最後測試下來看,我個人感覺是,對於移動互聯網來說,省電、省流量是所有底層服務的一個關鍵技術指標,XMPP協議看起來已經落後移動互聯網了。
③ XMPP協議的原理是什麼
XMPP工作機制:
例如:一個終端名字是Remeo,通過伺服器montague.lit與其他的用戶相連,其他的用戶
通過伺服器[email protected]建立連接。
第一步Romeo開始通過發送一個stream包與伺服器montague.lit取得聯系,這一步包含了鑒權,登錄等等。
第二步Romeo獲取了他的聯系人列表,通過向伺服器montague.lit發送<iq/>欄位請求,按照下面的協議。
<iq type=『get』from=『[email protected]/pda』>
<query xmlns=『jabber:iq:roster』/>
</iq>
<iq type=『result』to=『[email protected]/pda』>
<query xmlns=『jabber:iq:roster』>
<item jid=『[email protected]』/><item jid=『[email protected]』/>
<item jid=『[email protected]』/>
</query>
</iq>
第三步Romeo發送了一個presence請求到伺服器montague.lit,然後會將這個信息廣播到他的所有好友。
<presence from=『[email protected]/pda』/>
<presence from=『[email protected]/pda』to=『[email protected]』/>
<presence from=『[email protected]/pda』to=『[email protected]』
/>
<presence from=『[email protected]/pda』to=『[email protected]』
/>
第四步如果Romeo的聯系人都在線,就會將presence回復給Romeo,告知自己的狀態。
<presence to=『[email protected]/pda』from=『[email protected]/balcony』/>
<presence to=『[email protected]/pda』from=『[email protected]/chamber』/>
<presence to=『[email protected]/pda』from=『[email protected]/home』/>
第五步Romeo和Juliet開始交換信息,進行聊天。
<message from=『[email protected]/pda』to=『[email protected]』>
<body>hi!</body>
</message>
<message from=『[email protected]/balcony』to=『[email protected]/pda』
>
<body>hi yourself!</body>
</message>
以文檔的觀點來看,客戶端或伺服器發送的所有XML文本連綴在一起,從<stream>到</stream>構成了一個完整的XML文檔。其中的stream標簽就是所謂的XML Stream。在<stream>與</stream>中間的那些<message>...</message>這樣的XML元素就是所謂的XML Stanza(XML節)。XMPP核心協議通信的基本模式就是先建立一個stream,然後協商一堆安全之類的東西,中間通信過程就是客戶端發送XML Stanza,一個接一個的。伺服器根據客戶端發送的信息以及程序的邏輯,發送XML Stanza給客戶端。但是這個過程並不是一問一答的,任何時候都有可能從一個方發信給另外一方。通信的最後階段是</stream>關閉流,關閉TCP/IP連接。
④ 搭建XMPP協議,是否需要租用伺服器
可以自己搭建,可以利用第三方的, 你androidPN。github ,帶三方,極光推送,網路推送,,,,,。隨你自己了 查看更多答案>>
⑤ xmpp協議伺服器端語言哪個好
定義
XMPP(可擴展消息處理現場協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線現場探測。它在促進伺服器之間的准即時操作。這個協議可能最終允許網際網路用戶向網際網路上的其他任何人發送即時消息,即使其操作系統和瀏覽器不同。 XMPP的前身是Jabber,一個開源形式組織產生的網路即時通信協議。XMPP目前被IETF國際標准組織完成了標准化工作。標准化的核心結果分為兩部分; 核心的XML流傳輸協議 基於XML流傳輸的即時通訊擴展應用 XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網路通信協議更規范的平台上。藉助於XML易於解析和閱讀的特性,使得XMPP的協議能夠非常漂亮。 XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性。 XMPP的擴展協議Jingle使得其支持語音和視頻。
[編輯本段]基本網路結構
XMPP中定義了三個角色,客戶端,伺服器,網關。通信能夠在這三者的任意兩個之間雙向發生。伺服器同時承擔了客戶端信息記錄,連接管理和信息的路由功能。網關承擔著與異構即時通信系統的互聯互通,異構系統可以包括SMS(簡訊),MSN,ICQ等。基本的網路形式是單客戶端通過TCP/IP連接到單伺服器,然後在之上傳輸XML。
[編輯本段]功能
傳輸的是與即時通訊相關的指令。在以前這些命令要麼用2進制的形式發送(比如QQ),要麼用純文本指令加空格加參數加換行苻的方式發送(比如MSN)。而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發和查錯。而XMPP的核心部分就是一個在網路上分片斷發送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網路基礎協議。所以可以說,XMPP用TCP傳的是XML流。
[編輯本段]具體應用
舉個例子看看所謂的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連接。
[編輯本段]通俗解釋
其實XMPP 是一種很類似於http協議的一種數據傳輸協議,它的過程就如同「解包裝--〉包裝」的過程,用戶只需要明白它接受的類型,並理解它返回的類型,就可以很好的利用xmpp來進行數據通訊。
⑥ 微信是基於xmpp協議的么 或者說從中得到了啟示么
QQ微信這些都用的自己的協議,而且不會公開。
對於小一點的公司想要實現實時內聊天,一開始容從XMPP做起是不錯的選擇。因為它是一個公開的標准,又有很多開源的實現,比如你提到的Openfire, aSmack和XMPPFramework,可以花費較少的開發量,就可以搭建出一套還算好用的實時聊天方案。
起步之後,你會想要添加更多的功能,XMPP有很多擴展,很多需求都能滿足。一般來說,要做的產品都是伺服器、客戶端都由自己掌控,不需要和其他的廠商的聊天伺服器/客戶端互聯互通,所以之後可以慢慢在XMPP上加入自己的擴展,甚至是一些刪改(因為XMPP裡面不少機制是為了適應不同公司的組件)。於是漸漸的,最後使用的協議可能已經和標準的XMPP不一樣了,成了自己的協議。
這樣從XMPP上演進出來的協議,雖然具體實現和XMPP可能相差不少,但是基本思想和原理又與XMPP一致。相比自己從頭設計出一套全新的協議,基於這樣一套經過無數項目考驗過的協議,顯然容易得多,風險也要小得多。
⑦ 基於xmpp協議的即時通訊工具有哪些
即時通信(IM),抄
目前IM主要有四種協議:
即時信息和空間協議(IMPP)、
空間和即時信息協議(PRIM)、針對即時通信和空間平衡擴充的進程協議SIP(SIMPLE)以及XMPP。PRIM與XMPP、SIMPLE類似,但已經不再使用了。
⑧ XMPP 協議適合用來做移動 IM 么
可以。
XMPP是一種基於標准通用標記語言的子集XML的協議,它繼承了在XML環境中靈活的回發展性。因此答,基於XMPP的應用具有超強的可擴展性。經過擴展以後的XMPP可以通過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內容發布系統和基於地址的服務等應用程序。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能。
所以製作移動IM是沒有任何問題的。
⑨ 什麼是xmpp協議,它的工作原理是什麼
xmpp是一種基於xml的協議,它繼承了在xml環境中靈活的發展性。因此,基於xmpp的應用具有超強的可擴展性。經過擴展以後的XMPP可以通過發送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內容發布系統和基於地址的服務等應用程 序。而且,XMPP包含了針對伺服器端的軟體協議,使之能與另一個進行通話,這使得開發者更容易建立客戶應用程序或給一個配好系統添加功能。
在IETF 中,把IM協議劃分為四種協議,即即時信息和出席協議(Instant Messaging and Presence Protocol, IMPP)、出席和即時信息協議(Presence and Instant Messaging Protocol, PRIM)、針對即時信息和出席擴展的會話發起協議(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE),以及可擴展的消息出席協議(XMPP)。