即时聊天IM之一 XMPP协议简述
Q? Q:408365330???? E-Mail:egojit@qq.com
?綜述:
之前小規(guī)模的IM一直通過百度云推實(shí)現(xiàn)模擬IM,這種局限性比較多。公司很多的項(xiàng)目都需要IM集成,所以最終想想還是自己搭建XMPP服務(wù)器來實(shí)現(xiàn)IM功能。這樣可控性比較強(qiáng)。可以實(shí)現(xiàn)各種需求,首先就有必要學(xué)習(xí)XMPP協(xié)議。了解XMPP基礎(chǔ)協(xié)議的情況下才能更好的使用smack庫,已經(jīng)自定義各種擴(kuò)展。
XMPP簡介:
XMPP協(xié)議(Extensible Messaging and PresenceProtocol,可擴(kuò)展消息處理現(xiàn)場協(xié)議) 它是一種基于XML基礎(chǔ)上實(shí)現(xiàn)的一種協(xié)議,是聊天通訊的一個標(biāo)準(zhǔn)協(xié)議。Jabber最早實(shí)現(xiàn)XMPP協(xié)議的。首先我們知道XML格式擴(kuò)展性比較強(qiáng),而且它又具有HTML這種穿透防火墻的功能,所以不易被防火墻攔截,因此在此基礎(chǔ)上的XMPP協(xié)議當(dāng)然也具有這些特性,另外XML是和平臺無關(guān)的,實(shí)現(xiàn)多平臺數(shù)據(jù)交換沒有任何問題,XMPP肯定也是如此。
XMPP協(xié)議特點(diǎn):
1.XMPP協(xié)議系統(tǒng)是一個分布式的系統(tǒng),每臺服務(wù)器可以控制自己的系統(tǒng)資源,另一方面它也可以實(shí)現(xiàn)系統(tǒng)間資源交換。XMPP服務(wù)器利用開放的XML協(xié)議來進(jìn)行S2S(Serverto Server)通信,就像在C2S(Client to Server)一樣。相比之下,大多數(shù)的IM系統(tǒng)使用了只是支持C2S/S2C通信的協(xié)議,因此Jabber/XMPP服務(wù)器具有更大的靈活性。
2.XMPP協(xié)議是公開的非私密的,很多程序是開放源代碼。XMPP協(xié)議客戶端和服務(wù)器端的交互要經(jīng)由XML流。普通的聊天消息類型(message),改變用戶登錄狀態(tài)(presence),傳遞消息內(nèi)容或查詢/更新(info/quey)應(yīng)用是通過命名XML的命名空間(namespace)建立的。
3.狀態(tài)(Presence)在整個聊天鏈接中都是維持存在的,XMPP協(xié)議有在網(wǎng)絡(luò)中維持存在和可用信息的能力。
4.XMPP允許建立并行的TCP套接字連接對所有連接上的客戶端和服務(wù)器端。一旦建立連接,會一直維持。因?yàn)殒溄右恢北3种?#xff0c;那么 設(shè)置、用戶認(rèn)證、用戶登錄狀態(tài)查找功能都不用每次都重復(fù)執(zhí)行。
5.Jabber/XMPP系統(tǒng)是模塊化的,Jabber/XMPP的設(shè)計(jì)注重如何實(shí)現(xiàn)可伸縮性、安全性以及擴(kuò)展性。
?XMPP協(xié)議的解析:
在XMPP協(xié)議中一直存在著三個關(guān)鍵點(diǎn)和角色,服務(wù)端,網(wǎng)關(guān)以及客戶端(手機(jī),pc,平板……),我們這里所講的架構(gòu)都是服務(wù)端/客戶端模式,而非客戶端直連
1.消息解析:
Jabber/XMPP系統(tǒng)通過XML流傳輸數(shù)據(jù),XML從客戶端到服務(wù)端或者XML流從服務(wù)端到客戶端。這種XML流有三個頂層XML標(biāo)簽元素:<message/>,<presence/>和<iq/>,當(dāng)然每個標(biāo)簽都包含子標(biāo)簽元素和屬性,下面將描述這些元素:
一>.消息標(biāo)簽元素<message/>:
IM最基本的功能就是用戶之間進(jìn)行聊天消息發(fā)送,這個元素就是承擔(dān)著這種功能。每個message都有多個屬性"from"屬性和"to"屬性就是其中兩個,顧名思義就是信息誰發(fā)的,又是發(fā)給誰,也就是發(fā)送人地址和接收人地址。消息還有"type"屬性,標(biāo)志消息類型,這些都有固定的類型,當(dāng)然消息也有固定的身份id屬性,這個id標(biāo)志每一天消息,這是唯一區(qū)分消息的。
二>用戶狀態(tài)元素<presence/>:
用戶登錄后可以是:在線的available,隱身的Hide,又或者是離線的unavailable。用戶登錄上線后服務(wù)器會把消息發(fā)送給用戶,如果用戶不在線,那么服務(wù)器會把消息存儲起來,這樣可以實(shí)現(xiàn)離線消息。<presence/>元素包含<show/>和<status/>兩個元素,<show/>子元素是描述<status>的.
Presence主要有兩個用途: 1)告訴服務(wù)器所有客戶端當(dāng)前所處的狀態(tài),2)發(fā)出添加/刪除好友請求.
Presence.Type枚舉值如下:
- available: 表示處于在線狀態(tài)
- unavailable: 表示處于離線狀態(tài)
- subscribe: 表示發(fā)出添加好友的申請
- subscribed:表示好友請求確認(rèn)
- unsubscribe: 表示發(fā)出刪除好友的申請
- unsubscribed: 表示拒絕添加對方為好友
- error: 表示presence信息報中包含了一個錯誤消息。
?
三>消息/查詢元素<iq/>
Jabber/XMPP協(xié)議的最后一個訂層元素就是<iq/>元素。Info/Query的縮寫就是iq 顧名思義就是信息/查詢,通過這個元素可以獲取各個端之間的消息,它是請求響應(yīng)的也就是查詢反饋模式。每個iq的目的都是不同的,它們通過命名空間namespace來區(qū)分。iq也有"from" "type" "id" 三個屬性,type屬性和http協(xié)議差不多有g(shù)et 和post值.每一個IQ-get?或IQ-set?節(jié)均必須接收響應(yīng)的IQ-result?或IQ-error?節(jié)。通過這種查詢/反饋結(jié)果的方式客戶端和服務(wù)器通信
?
轉(zhuǎn)載于:https://www.cnblogs.com/egojit/p/4874318.html
總結(jié)
以上是生活随笔為你收集整理的即时聊天IM之一 XMPP协议简述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android笔记:Activity
- 下一篇: iOS开发UI篇—使用嵌套模型完成的一个