即時通訊技術(IM)
支持用戶在線交談,如果要發送一條消息,用戶需要打開一個小窗口,以便于讓用戶機器朋友在其中輸入信息并讓交談雙方都看到交談的內容
XMPP起源
XMPP是一種基于XML的協議,它繼承了在XML環境中靈活的發展性。這表明XMPP是可擴展的。可以通過發送擴展的信息來處理用戶的需求,以及在 XMPP的頂端建立如內容發布系統和基于地址的服務等應用程序。而且,XMPP包含了針對服務器端的軟件協議,使之能與另一個服務器進行通話,這使得開發者更容易建立客戶應用程序或給一個配置好的系統添加功能
XMPP的核心XML流傳輸協議的定義使得XMPP能夠在一個比以往網絡通信協議更規范的平臺上。借助于XML易于解析和閱讀的特性,使得XMPP的協議能夠非常漂亮
XMPP的即時通訊擴展應用部分是根據IETF在這之前對即時通訊的一個抽象定義的,與其他業已得到廣泛使用的即時通訊協議,諸如AIM,QQ等有功能完整,完善等先進性
XMPP的擴展協議Jingle使得其支持語音和視頻,目前iOS尚不支持
XMPP的官方文檔RFC 3920
XMPP協議曾經是Google力推的即時通信協議,其代表作品是GTalk
Google Talk(GTalk)
Google Talk是Google的IM工具,除了具有IM功能外,另外還加上了Viop功能,“界面清新大方”,可直接鏈接Gmail,接受查看郵件
由于Google Talk是基于Jabber開源標準,這種標準允許用戶和其它的即時訊息系統相連,比如蘋果電腦的iChat,GAIM,Trillian Pro以及Psi。Google Talk只能夠在Windows平臺上運行
Google Talk的用戶無法使用這種軟件與AIM,MSN Messenger或者雅虎Messenger的用戶進行互通
GTalk即將退出歷史舞臺
2013年5月,在Google I/O大會上,Google推出統一跨平臺聊天應用Hangouts(環聊)取代Google Talk
XMPP定義
XMPP:The Extensible Messaging and Presence Protocol(可擴展通訊和表示協議)
XMPP可用于服務類實時通訊、表示和需求響應服務中的XML數據元流式傳輸。XMPP以Jabber協議為基礎,而Jabber是即時通訊中常用的開放式協議
XMPP是基于XML的協議,用于即時消息(IM)以及在線現場探測。促進服務器之間的準即時操作。這個協議可能最終允許因特網用戶向因特網上的其他任何人發送即時消息,即使其操作系統和瀏覽器不同
XMPP的基本結構
XMPP是一個典型的C/S架構,而不是像大多數即時通訊軟件一樣,使用P2P客戶端到客戶端的架構,也就是說在大多數情況下,當兩個客戶端進行通訊時, 他們的消息都是通過服務器傳遞的。采用這種架構,主要是為了簡化客戶端,將大多數工作放在服務器端進行
XMPP中定義了三個角色,客戶端,服務器,網關。通信能夠在這三者的任意兩個之間雙向發生
服務器同時承擔了客戶端信息記錄,連接管理和信息的路由功能
網關承擔著與異構即時通信系統的互聯互通,異構系統可以包括SMS(短信),MSN,ICQ等
基本的網絡形式是單客戶端通過TCP/IP連接到單服務器,然后在之上傳輸XML流
XMPP工作原理
節點連接到服務器
服務器利用本地目錄系統中的證書對其認證
節點指定目標地址,讓服務器告知目標狀態
服務器查找、連接并進行相互認證
節點之間進行交互
傳輸內容
XMPP應用傳輸的是與即時通訊相關的指令。在以前這些命令要么用二進制的形式發送(比如QQ),要么用純文本指令加空格加參數加換行符的方式發送(比如MSN)
而XMPP傳輸的即時通訊指令的邏輯與以往相仿,只是協議的形式變成了XML格式的純文本。這不但使得解析容易了,人也容易閱讀了,方便了開發和查錯
而XMPP的核心部分就是一個在網絡上分片段發送XML的流協議。這個流協議是XMPP的即時通訊指令的傳遞基礎,也是一個非常重要的可以被進一步利用的網絡基礎協議。可以說,XMPP用TCP傳的是XML流
XMPP的優點
優點
開放
標準(XMPP的技術規格已被定義在RFC 3920及RFC 3921)
證實可用
分散
安全
可擴展
缺點
數據負載過重
沒有二進制傳輸
通訊的實現
建立通道
連接服務器
連接成功
驗證成功
發送上線狀態
通道收到狀態事件
通道收到消息事件
XMPP框架常用擴展
XEP-0045: 多用戶聊天
XEP-0060: 發布-訂閱
XEP-0065: SOCKS5字節流
XEP-0085: 聊天狀態通知
XEP-0096: 文件傳輸
XEP-0172: 用戶昵稱
CoreDataStorage: 數據存儲
Reconnect:重新連接
Roster:花名冊
xmpp的傳輸小結
XMPP是一種類似于HTTP協議的一種數據傳輸協議,其過程就如同“解包裝--〉包裝”的過程。只需要理解其接收的類型及返回的類型,便可以很好的利用XMPP來進行數據通訊
XMPP核心文件
XMPPStream:是開發過程中最主要交互的類,所有擴展和自定義代碼均要基于此類進行
XMPPParser:供XMPPStream解析使用
XMPPJID:提供了一個不可變JID的實現,遵守NSCopying協議和NSCoding協議
XMPPElement:以下三個XMPP元素的基類
XMPPIQ:請求
XMPPMessage:消息
XMPPPresence:出席
XMPPModule:開發XMPP擴展時使用
XMPPLogging:XMPP的日志框架
XMPPInternal:整個XMPP框架內部使用的核心和高級底層內容