標籤:
XMPP簡單介紹與準備
一、即時通訊簡單介紹
1、簡單說明
即時通訊技術(IM)支援使用者線上即時交談。如果要發送一條資訊,使用者需要開啟一個小視窗,以便讓使用者及其朋友在其中輸入資訊並讓交談雙方都看到交談的內容。
有許多的IM系統,如AOL IM、Yahoo IM、 MSN以及QQ,它們最大的區別在於各自通訊協議的實現,所以即時通訊技術的核心在於它的傳輸協議。
協議用來說明資訊在網路上如何傳輸,如果有了統一的傳輸協議,那麼應當可以實現各個IM之間的直接通訊,為了建立即時通訊的統一標準,目前已經出現過的IM 協議包括:IETF的對話初始協議(SIP)和即時通訊對話初始協議和表示擴充協議(SIMPLE)、應用交換協議(APEX)、顯示和即時通訊協議 (PRIM)及基於XML且開放的可擴充通訊和表示協議(XMPP)協議(常稱為 Jabber 協議)。
業界經過多次努力,試圖統一各大主要IM供應商的標準(AOL、Yahoo 及 Microsoft),但無一成功,且每一種IM仍然繼續使用自己所擁有的協議。
2.遵守XMPP即時通訊協議
設計一款全世界都使用的即時通訊協議,無論使用什麼即時通訊軟體,都可以互聯互連。
3.即時通訊在垂直社交中的意義
和第一代大而全的水平網站(又稱綜合性網站)不同,垂直網站注意力集中在某些特定的領域或某種特定的需求,提供有關這個領域或需求的全部深度資訊和相關服務,作為互連網的新亮點,垂直網站正引起越來越多人的關注。在越來越多的網路吸引老百姓的注意力時,網民卻逐漸走出時髦、好奇的初級階段,不斷在網上尋找著實際、實用和實惠。隨著移動互連網應用的發展,現在越來越多的App正在向垂直應用遷移,垂直應用中同類使用者群體之間的溝通,產生彙總就顯得尤為重要了,因此目前國內市場的XMPP應用開發的人才需求非常大。
4.XMPP的起源
XMPP是基於XML的協議,用於立即訊息(IM)以及線上現場探測。最初,XMPP作為一個架構開發,目標是支援企業環境內的立即訊息和聯機狀態應用程式。當時的立即訊息網路是私人的,不適合企業使用。XMPP前身是Jabber(1998年),是一個開源組織定義的網路即時通訊協定。
XMPP是一個分散型通訊網路,這意味著,只要網路基礎設施允許,任何XMPP使用者都可以向其他任何XMPP使用者傳遞訊息。多個XMPP伺服器也可以通過一個專門的“伺服器-伺服器”協議相互連信,提供了建立分散型社交網路和協作架構的可能性。
儘管XMPP的出現是為了滿足“個人-個人”立即訊息的要求,但它完全不必局限於此任務。
二、XMPP相關
1.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。
注意:相對xml,json更高效一些。
2.Google Talk說明
Google Talk是Google的IM工具,除了具有IM功能外,另外還加上了Voip功能,“介面清新大方”,可直接連結Gmail,接受查看郵件。由於Google Talk是基於Jabber開源標準,這種標準允許使用者和其它的即時訊息系統相連,比如蘋果電腦的iChat,GAIM,Trillian Pro以及Psi。Google Talk只能夠在Windows平台上運行。Google Talk的使用者無法使用這種軟體與AIM,MSN Messenger或者雅虎Messenger的使用者進行互連。
2013年5月,在Google I/O大會上,Google推出統一跨平台聊天應用Hangouts(環聊)取代Google Talk。Google Hangouts不支援XMPP協議。Google Hangouts使用者與非Google服務如XMPP協議的強有力支援者jabber.org之間的交流無法進行。
目前,Google Wave是基於XMPP協議的,並且Google還開發Jingle擴充進行基於XMPP協議的視訊交談。儘管Google尚未宣布Talk的關閉日期,不過從Google關閉Reader和iCal支援來看,Talk關閉之日不會太遠
3.XMPP定義
XMPP:The Extensible Messaging and Presence Protocol(可擴充通訊和表示協議)。
XMPP可用於服務類即時通訊、表示和需求響應服務中的XML資料元串流。XMPP以Jabber協議為基礎,而Jabber是即時通訊中常用的開放式協議。
XMPP是基於XML的協議,用於立即訊息(IM)以及線上現場探測。促進伺服器之間的准即時操作。這個協議可能最終允許網際網路使用者向網際網路上的其他任何人傳送立即訊息,即使其作業系統和瀏覽器不同。
4.基本結構
XMPP是一個典型的C/S架構,而不是像大多數即時通訊軟體一樣,使用P2P用戶端到用戶端的架構,也就是說在大多數情況下,當兩個用戶端進行通訊時, 他們的訊息都是通過伺服器傳遞的。採用這種架構,主要是為了簡化用戶端,將大多數工作放在伺服器端進行。
XMPP中定義了三個角色,用戶端,伺服器,網關。通訊能夠在這三者的任意兩個之間雙向發生。
伺服器同時承擔了用戶端資訊記錄,串連管理和資訊的路由功能。 網關承擔著與異構即時通訊系統的互聯互連,異構系統可以包括SMS(簡訊),MSN,ICQ等。
基本的網路形式是單用戶端通過TCP/IP串連到單伺服器,然後在之上傳輸XML流。
三:原理介紹
簡介
XMPP是一種基於標準通用標記語言 (SGML)的子集XML協議,具有超強的可拓展性。經過拓展的XMPP可以通過發送拓展的資訊來處理使用者需求。XMPP包含了正對服務端的軟體協議,使之能夠與另一個進行通話。XMPP以Jabber協議為基礎,而Jabber是即時通訊中常用的開放式協議。目前由IETF國際標準組織完成標準化工作。
標準化的核心分為兩個部分
- 核心的XML流傳輸協議
- 基於XMLFreeEIM流傳輸的即時通訊擴充應用(這部分支援語音和視頻)
優點:
開放,它是開放源碼的,自由開放公開。
標準化,IETF 互連網工程工作小組標準化
成熟,第一個jabber技術是在1998年開發的,現在已經相當穩定
四:開始使用XMPPFramework
本文示範一個運行了XMPPFramework架構的項目demo,這不是一個成熟的應用,僅僅展示了架構的使用方法。本demo僅僅使用了架構的一部分功能。當你決定添加XMPP架構到你自己的IOS應用中,本文將提供詳細的介紹。最好按照流程一步一步來,不要跳過某些步驟。
Setp1:
下載最新的代碼
Step2
架構有幾個依賴的檔案,當你把XMPPFramework拿下來的時候,已經自動放在Vendor檔案夾下面。我們將把每一個依賴檔案過一遍。
第一個依賴包是CocoaLumberjack,它的位置:Vendor/CocoaLumberjack。拖進工程選擇copy,確保項目能夠編譯。
Step3
第二個依賴包是CocoaAsyncSocket,它的位置:Vendor/CocoaAsyncSocket,拖進工程選擇copy。
這個包需要你添加蘋果的CFNetwork framework和Security framework。Target -> Build Phases -> Link Binary With Libraries -> + ->選擇CFNetwork framework和Security framework。添加完後,確保項目能夠編譯。
Step4
第三個依賴包是KissXml,在Vendor/KissXML 可以找到。KissXML使用libxml2,你需要添加蘋果的libxml2庫 到工程檔案中。在Targets->BuildSettings->Search Paths-> + ->/usr/include/libxml2。
libxml2.需要你添加蘋果的CFNetwork framework和Security framework。Target -> Build Phases -> Link Binary With Libraries -> + ->選擇libxml2.dylb。
添加完後,確保項目能夠編譯
Step5
第四個,也是最後一個依賴包是LIBLdn,添加下面的三個檔案到Xcode工程檔案
- Vendor/libidn/idn-int.h
- Vendor/libidn/stringprep.h
- Vendor/libidn/libidn.a
最後一個檔案是靜態庫,支援x86*64, i386, ppc, armv6, armv7指令集,因此比較大1.3M。但你的應用打包時,它只會解壓你的應用需要用到的指令集對應的檔案,所以不用擔心應用程式檔案變大。添加完成後,確保項目能夠編譯。
Step6
添加以下的檔案夾到工程中
- Authentication
- Categories
- Core
- Utilities
Target -> Build Phases -> Link Binary With Libraries -> + ->選擇libresolv.dylib,添加完後,確保項目能夠編譯。
現在你已經可以開始使用XMPPFramwork 在你的項目中,
以下頁面你可以瞭解它的使用
https://github.com/robbiehanson/XMPPFramework/wiki/IntroToFramework
最後我自己的整理版本是這樣的:
添加以下的檔案夾到工程中
- Authentication
- Categories
- Core
- Utilities
添加Vendor下面的CocoaLumberjack、CocoaAsyncSocket、KissXml、LIBLdn檔案夾道工程中,選擇copy。
添加蘋果的libxml2庫 到工程檔案中。在Targets->BuildSettings->Search Paths-> + ->/usr/include/libxml2
添加蘋果的動態連結程式庫。Target -> Build Phases -> Link Binary With Libraries -> + ->選擇CFNetwork framework、libxml2.dylb、Security framework、libresolv.dylib。
最後確保編譯通過。
iOS開發——網路編程OC篇&(一)XMPP簡單介紹與準備