即時(shí)通訊技術(shù)(IM)
支持用戶在線交談缀棍,如果要發(fā)送一條消息,用戶需要打開一個(gè)小窗口欣鳖,以便于讓用戶機(jī)器朋友在其中輸入信息并讓交談雙方都看到交談的內(nèi)容
XMPP起源
XMPP是一種基于XML的協(xié)議漫蛔,它繼承了在XML環(huán)境中靈活的發(fā)展性抛蚤。這表明XMPP是可擴(kuò)展的低淡⌒昭裕可以通過發(fā)送擴(kuò)展的信息來處理用戶的需求瞬项,以及在 XMPP的頂端建立如內(nèi)容發(fā)布系統(tǒng)和基于地址的服務(wù)等應(yīng)用程序。而且何荚,XMPP包含了針對(duì)服務(wù)器端的軟件協(xié)議囱淋,使之能與另一個(gè)服務(wù)器進(jìn)行通話,這使得開發(fā)者更容易建立客戶應(yīng)用程序或給一個(gè)配置好的系統(tǒng)添加功能
XMPP的核心XML流傳輸協(xié)議的定義使得XMPP能夠在一個(gè)比以往網(wǎng)絡(luò)通信協(xié)議更規(guī)范的平臺(tái)上餐塘。借助于XML易于解析和閱讀的特性妥衣,使得XMPP的協(xié)議能夠非常漂亮
XMPP的即時(shí)通訊擴(kuò)展應(yīng)用部分是根據(jù)IETF在這之前對(duì)即時(shí)通訊的一個(gè)抽象定義的,與其他業(yè)已得到廣泛使用的即時(shí)通訊協(xié)議戒傻,諸如AIM税手,QQ等有功能完整,完善等先進(jìn)性
XMPP的擴(kuò)展協(xié)議Jingle使得其支持語音和視頻需纳,目前iOS尚不支持
XMPP的官方文檔RFC 3920
XMPP協(xié)議曾經(jīng)是Google力推的即時(shí)通信協(xié)議芦倒,其代表作品是GTalk
Google Talk(GTalk)
Google Talk是Google的IM工具,除了具有IM功能外候齿,另外還加上了Viop功能,“界面清新大方”闺属,可直接鏈接Gmail慌盯,接受查看郵件
由于Google Talk是基于Jabber開源標(biāo)準(zhǔn),這種標(biāo)準(zhǔn)允許用戶和其它的即時(shí)訊息系統(tǒng)相連掂器,比如蘋果電腦的iChat亚皂,GAIM,Trillian Pro以及Psi国瓮。Google Talk只能夠在Windows平臺(tái)上運(yùn)行
Google Talk的用戶無法使用這種軟件與AIM灭必,MSN Messenger或者雅虎Messenger的用戶進(jìn)行互通
GTalk即將退出歷史舞臺(tái)
2013年5月,在Google I/O大會(huì)上乃摹,Google推出統(tǒng)一跨平臺(tái)聊天應(yīng)用Hangouts(環(huán)聊)取代Google Talk
XMPP定義
XMPP:The Extensible Messaging and Presence Protocol(可擴(kuò)展通訊和表示協(xié)議)
XMPP可用于服務(wù)類實(shí)時(shí)通訊禁漓、表示和需求響應(yīng)服務(wù)中的XML數(shù)據(jù)元流式傳輸。XMPP以Jabber協(xié)議為基礎(chǔ)孵睬,而Jabber是即時(shí)通訊中常用的開放式協(xié)議
XMPP是基于XML的協(xié)議播歼,用于即時(shí)消息(IM)以及在線現(xiàn)場(chǎng)探測(cè)。促進(jìn)服務(wù)器之間的準(zhǔn)即時(shí)操作掰读。這個(gè)協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時(shí)消息秘狞,即使其操作系統(tǒng)和瀏覽器不同
XMPP的基本結(jié)構(gòu)
XMPP是一個(gè)典型的C/S架構(gòu),而不是像大多數(shù)即時(shí)通訊軟件一樣蹈集,使用P2P客戶端到客戶端的架構(gòu)烁试,也就是說在大多數(shù)情況下,當(dāng)兩個(gè)客戶端進(jìn)行通訊時(shí)拢肆, 他們的消息都是通過服務(wù)器傳遞的减响。采用這種架構(gòu)靖诗,主要是為了簡(jiǎn)化客戶端,將大多數(shù)工作放在服務(wù)器端進(jìn)行
XMPP中定義了三個(gè)角色辩蛋,客戶端呻畸,服務(wù)器,網(wǎng)關(guān)悼院。通信能夠在這三者的任意兩個(gè)之間雙向發(fā)生
服務(wù)器同時(shí)承擔(dān)了客戶端信息記錄伤为,連接管理和信息的路由功能
網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時(shí)通信系統(tǒng)的互聯(lián)互通,異構(gòu)系統(tǒng)可以包括SMS(短信)据途,MSN绞愚,ICQ等
基本的網(wǎng)絡(luò)形式是單客戶端通過TCP/IP連接到單服務(wù)器,然后在之上傳輸XML流
XMPP工作原理
節(jié)點(diǎn)連接到服務(wù)器
服務(wù)器利用本地目錄系統(tǒng)中的證書對(duì)其認(rèn)證
節(jié)點(diǎn)指定目標(biāo)地址颖医,讓服務(wù)器告知目標(biāo)狀態(tài)
服務(wù)器查找位衩、連接并進(jìn)行相互認(rèn)證
節(jié)點(diǎn)之間進(jìn)行交互
傳輸內(nèi)容
XMPP應(yīng)用傳輸?shù)氖桥c即時(shí)通訊相關(guān)的指令。在以前這些命令要么用二進(jìn)制的形式發(fā)送(比如QQ)熔萧,要么用純文本指令加空格加參數(shù)加換行符的方式發(fā)送(比如MSN)
而XMPP傳輸?shù)募磿r(shí)通訊指令的邏輯與以往相仿糖驴,只是協(xié)議的形式變成了XML格式的純文本。這不但使得解析容易了佛致,人也容易閱讀了贮缕,方便了開發(fā)和查錯(cuò)
而XMPP的核心部分就是一個(gè)在網(wǎng)絡(luò)上分片段發(fā)送XML的流協(xié)議。這個(gè)流協(xié)議是XMPP的即時(shí)通訊指令的傳遞基礎(chǔ)俺榆,也是一個(gè)非常重要的可以被進(jìn)一步利用的網(wǎng)絡(luò)基礎(chǔ)協(xié)議感昼。可以說罐脊,XMPP用TCP傳的是XML流
XMPP的優(yōu)點(diǎn)
優(yōu)點(diǎn)
開放
標(biāo)準(zhǔn)(XMPP的技術(shù)規(guī)格已被定義在RFC 3920及RFC 3921)
證實(shí)可用
分散
安全
可擴(kuò)展
缺點(diǎn)
數(shù)據(jù)負(fù)載過重
沒有二進(jìn)制傳輸
通訊的實(shí)現(xiàn)
建立通道
連接服務(wù)器
連接成功
驗(yàn)證成功
發(fā)送上線狀態(tài)
通道收到狀態(tài)事件
通道收到消息事件
XMPP框架常用擴(kuò)展
XEP-0045: 多用戶聊天
XEP-0060: 發(fā)布-訂閱
XEP-0065: SOCKS5字節(jié)流
XEP-0085: 聊天狀態(tài)通知
XEP-0096: 文件傳輸
XEP-0172: 用戶昵稱
CoreDataStorage: 數(shù)據(jù)存儲(chǔ)
Reconnect:重新連接
Roster:花名冊(cè)
xmpp的傳輸小結(jié)
XMPP是一種類似于HTTP協(xié)議的一種數(shù)據(jù)傳輸協(xié)議定嗓,其過程就如同“解包裝--〉包裝”的過程。只需要理解其接收的類型及返回的類型萍桌,便可以很好的利用XMPP來進(jìn)行數(shù)據(jù)通訊
XMPP核心文件
XMPPStream:是開發(fā)過程中最主要交互的類宵溅,所有擴(kuò)展和自定義代碼均要基于此類進(jìn)行
XMPPParser:供XMPPStream解析使用
XMPPJID:提供了一個(gè)不可變JID的實(shí)現(xiàn),遵守NSCopying協(xié)議和NSCoding協(xié)議
XMPPElement:以下三個(gè)XMPP元素的基類
XMPPIQ:請(qǐng)求
XMPPMessage:消息
XMPPPresence:出席
XMPPModule:開發(fā)XMPP擴(kuò)展時(shí)使用
XMPPLogging:XMPP的日志框架
XMPPInternal:整個(gè)XMPP框架內(nèi)部使用的核心和高級(jí)底層內(nèi)容