一歼指、即時(shí)通訊技術(shù)
即時(shí)通訊技術(shù)
(IM
-- Instant Messaging)-> 支持用戶在線實(shí)時(shí)交談有許多的IM系統(tǒng)爹土,如AOL、Yahoo IM踩身、 MSN以及QQ胀茵,它們
最大的區(qū)別在于各自通訊協(xié)議的實(shí)現(xiàn)
,所以n即時(shí)通訊技術(shù)的核心在于它的傳輸協(xié)議
-
協(xié)議
-> 用來(lái)說(shuō)明信息在網(wǎng)絡(luò)上如何傳輸如果有了統(tǒng)一的傳輸協(xié)議挟阻,那么應(yīng)當(dāng)可以實(shí)現(xiàn)各個(gè)IM之間的直接通訊
-
為了創(chuàng)建即時(shí)通訊的統(tǒng)一標(biāo)準(zhǔn)琼娘,目前已經(jīng)出現(xiàn)過(guò)的IM協(xié)議包括:
- IETF的對(duì)話初始協(xié)議(SIP): SIP是建立VOIP連接的IETF標(biāo)準(zhǔn),而VOIP就是網(wǎng)絡(luò)電話
- 即時(shí)通訊對(duì)話初始協(xié)議和表示擴(kuò)展協(xié)議(SIMPLE)
- 應(yīng)用交換協(xié)議(APEX)赁濒、顯示和即時(shí)通訊協(xié)議(PRIM)
-
基于XML且開放的可擴(kuò)展通訊和表示協(xié)議(XMPP)協(xié)議
(常稱為 Jabber 協(xié)議)
人們多次努力轨奄,試圖統(tǒng)一各大主要IM供應(yīng)商的標(biāo)準(zhǔn)(AOL、Yahoo 及 Microsoft)拒炎,但無(wú)一成功挪拟,且每一種IM仍然繼續(xù)使用自己所擁有的協(xié)議
二、XMPP簡(jiǎn)介
XMPP誕生的由來(lái)
- 都是遵守XMPP即時(shí)通訊協(xié)議
- 設(shè)計(jì)一款全世界都使用的即時(shí)通訊協(xié)議击你,無(wú)論使用什么即時(shí)通訊軟件玉组,都可以互聯(lián)互通
XMPP起源
-
XMPP是基于XML的協(xié)議
,用于即時(shí)消息(IM)以及在線現(xiàn)場(chǎng)探測(cè)丁侄。最初惯雳,XMPP作為一個(gè)框架開發(fā),目標(biāo)是支持企業(yè)環(huán)境內(nèi)的即時(shí)消息傳遞和聯(lián)機(jī)狀態(tài)應(yīng)用程序鸿摇。 - XMPP的
前身是Jabber
(1998年)石景,是一個(gè)開源組織定義的網(wǎng)絡(luò)即時(shí)通信協(xié)議 - XMPP是
一個(gè)分散型通信網(wǎng)絡(luò)
- 這意味著,只要網(wǎng)絡(luò)基礎(chǔ)設(shè)施允許拙吉,任何XMPP用戶都可以向其他任何XMPP用戶傳遞消息潮孽。
- 多個(gè)XMPP服務(wù)器也可以通過(guò)一個(gè)專門的“服務(wù)器-服務(wù)器”協(xié)議相互通信,提供了創(chuàng)建分散型社交網(wǎng)絡(luò)和協(xié)作框架的可能性
XMPP概述
-
XMPP是一種基于XML的協(xié)議
- 它繼承了在XML(可擴(kuò)展標(biāo)記語(yǔ)言)環(huán)境中靈活的發(fā)展性筷黔。這表明
XMPP是可擴(kuò)展的
往史。 -
XMPP包含了針對(duì)服務(wù)器端的軟件協(xié)議
,使之能與另一個(gè)進(jìn)行通話佛舱,這使得開發(fā)者更容易建立客戶應(yīng)用程序或給一個(gè)配置好的系統(tǒng)添加功能
- 它繼承了在XML(可擴(kuò)展標(biāo)記語(yǔ)言)環(huán)境中靈活的發(fā)展性筷黔。這表明
-
XMPP的核心
XML流
傳輸協(xié)議的定義- 使得XMPP能夠在一個(gè)比以往網(wǎng)絡(luò)通信協(xié)議更規(guī)范的平臺(tái)上椎例。借助于XML易于解析和閱讀的特性,使得XMPP的協(xié)議能夠非常漂亮
XMPP的擴(kuò)展協(xié)議Jingle使得其支持語(yǔ)音和視頻请祖,目前iOS尚不支持
XMPP的官方文檔是RFC 3920
XMPP協(xié)議曾經(jīng)是Google力推的即時(shí)通信協(xié)議订歪,
其代表作品是GTalk
Google Talk(GTalk)
Google Talk是Google的IM工具,除了具有IM功能外损拢,另外還加上了Voip功能陌粹,“界面清新大方”,可直接鏈接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的用戶無(wú)法使用這種軟件與AIM,MSN Messenger或者雅虎Messenger的用戶進(jìn)行互通
2013年5月邮破,在Google I/O大會(huì)上诈豌,Google推出統(tǒng)一跨平臺(tái)聊天應(yīng)用
Hangouts(環(huán)聊)取代Google Talk
Google Hangouts不支持XMPP協(xié)議
,Google Hangouts用戶與如XMPP協(xié)議的強(qiáng)有力支持者jabber.org之間的交流無(wú)法進(jìn)行Hangouts目前在中國(guó)大陸無(wú)法使用抒和,尚不支持iOS7.0
目前矫渔,Google Wave是基于XMPP協(xié)議的
,并且Google還開發(fā)Jingle擴(kuò)展進(jìn)行基于XMPP協(xié)議的視頻聊天摧莽。盡管Google尚未宣布Talk的關(guān)閉日期庙洼,不過(guò)從Google關(guān)閉Reader和iCal支持來(lái)看,Talk關(guān)閉之日不會(huì)太遠(yuǎn)
三镊辕、XMPP定義
-
XMPP:
- The Extensible Messaging and Presence Protocol(
可擴(kuò)展通訊和表示協(xié)議
)
- The Extensible Messaging and Presence Protocol(
-
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):典型的C/S架構(gòu)
- XMPP是一個(gè)
典型的C/S架構(gòu)
- 而不是像大多數(shù)即時(shí)通訊軟件一樣亏娜,使用P2P客戶端到客戶端的架構(gòu)
- 也就是說(shuō)在大多數(shù)情況下厦章,當(dāng)兩個(gè)客戶端進(jìn)行通訊時(shí), 他們的消息都是通過(guò)服務(wù)器傳遞的照藻。
- 優(yōu)點(diǎn):采用這種架構(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ò)形式:
-
單客戶端通過(guò)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)的指令
- 而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é)議,可以說(shuō)XMPP用TCP傳的是XML流
七序苏、XMPP的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
- 開放
- 標(biāo)準(zhǔn)(XMPP的技術(shù)規(guī)格已被定義在RFC 3920及RFC 3921)
- 證實(shí)可用手幢,谷歌證實(shí)了GTalk
- 分散
- 安全
- 可擴(kuò)展
缺點(diǎn)
- 數(shù)據(jù)負(fù)載過(guò)重XML
- 沒(méi)有二進(jìn)制傳輸
八、XMPP的傳輸小結(jié)
- XMPP是一種
類似于HTTP協(xié)議
的一種數(shù)據(jù)傳輸協(xié)議
忱详,- 其過(guò)程就如同“解包裝--〉包裝”的過(guò)程围来。只需要理解其接收的類型及返回的類型,便可以很好的利用XMPP來(lái)進(jìn)行數(shù)據(jù)通訊
- XMPP官方網(wǎng)站——http://xmpp.org
九踱阿、XMPP——JID
-
每個(gè) XMPP客戶端用戶必須擁有一個(gè)全局惟一標(biāo)識(shí)符管钳。
- 基于歷史原因,這些標(biāo)識(shí)符稱為
Jabber ID或JID
软舌。鑒于協(xié)議的分布式特征才漆,JID應(yīng)包含聯(lián)系用戶所需的所有信息,JID的結(jié)構(gòu)類似于電子郵件地址佛点,但不要求 JID同時(shí)也是有效的電子郵件收件人
- 基于歷史原因,這些標(biāo)識(shí)符稱為
-
客戶端和服務(wù)器節(jié)點(diǎn)醇滥,被統(tǒng)稱為XMPP實(shí)體,都擁有JID
超营。例如:SomeCorp公司的員工 John Doe可能擁有JID:用戶名@服務(wù)器名稱-
John.Doe@somecorp.com
- 其中somecorp.com是 SomeCorp公司的
XMPP服務(wù)器的地址
- John.Doe是John Doe的
用戶名
- 其中somecorp.com是 SomeCorp公司的
-
John.Doe@somecorp.com
十鸳玩、環(huán)境搭建
開發(fā)客戶端:ios 、Xcode開發(fā)選擇
服務(wù)器:Openfire選擇
-
數(shù)據(jù)庫(kù):MySql選擇
安裝MySQL管理工具——mysql-workbench