XMPP

  1. XMPP的介紹:The Extensible Messaging and Presence Protocol(可擴展通訊和表示協議)拯勉。XMPP是一套即時通信協議谜诫,實現了注冊、登錄攀涵、聊天托启、好友、群聊等功能尖殃。XMPP是一種基于XML的協議丈莺,繼承XML環(huán)境中靈活的發(fā)展性。

  2. 工作原理:XMPP是一個典型的C/S架構(C/S<客戶端/服務器>服務器壓力大送丰、客戶端簡單;P/P<點對點>架構服務器壓力小缔俄,客戶端復雜,QQ就是P/P)蚪战。XMPP中定義了三個角色牵现,XMPP客戶端、XMPP服務器邀桑、網管瞎疼。通信能夠在三者的任意兩個之間雙向發(fā)生。

a) 節(jié)點連接到服務器壁畸;

b) 服務器利用本地目錄系統中的證書對其認證贼急;

c) 節(jié)點指定目標地址,讓服務器告知目標狀態(tài)捏萍;

d) 服務器查找太抓、連接并進行相互認證;

e) 節(jié)點之間進行交互令杈。

  1. XMPP傳輸過程:XMPP協議的傳輸是通過XML文件來傳輸的走敌,并且不是類似于QQ的點對點通訊,而是客戶端到服務器再到客戶端的方式來實現逗噩,以上過程的一個簡單的XMPP通訊流程可以如下:

a) 首先掉丽,由客戶端連接到服務器跌榔,客戶端通過IO流發(fā)送一段XML文件,在文件中包含了自身的用戶名和密碼

b) 服務器端接收到客戶端的XML文件捶障,從中獲取用戶名和密碼進行驗證僧须,如果驗證成功,服務器會發(fā)送一個XML文件給客戶端表明已經登錄成功

c) 登陸成功后项炼,客戶端可以通過發(fā)送一個獲取好友名單的XML文件担平,服務器會將當前用戶的好友以XML文件傳到客戶端

d) 客戶端選擇一個好友,向其發(fā)送信息(其實是向服務器發(fā)送锭部,服務器收到后會轉發(fā)給對應的好友)暂论,好友收到

  1. XMPP的三大節(jié)點:

a) XMPPPresence:出席(登錄、下線空免、隱身等)

b) XMPPMessage:消息

c) XMPPIQ:信息請求(info query)

  1. XMPP環(huán)境配置:使用Openfire服務器(是開源的空另、基于可拓展通訊和表示協議(XMPP)、采用Java編程語言開發(fā)的實時協作服務器蹋砚。Openfire安裝和使用都非常簡單扼菠,并利用Web進行管理。單臺服務器可支持上萬并發(fā)用戶坝咐。)循榆,MySQL數據庫。服務器監(jiān)聽的端口一般是5222

  2. 蘋果XMPP開發(fā)框架:XMPPFramework是一個OS X/iOS平臺的開源項目墨坚,使用Objective-C實現了XMPP協議(RFC-3920)秧饮,同時還提供了用于讀寫XML的工具,大大簡化了基于XMPP的通信應用的開發(fā)泽篮。它的核心是由Core文件夾下的核心類庫和Extensions拓展類庫組成的盗尸,其中Core類庫負責應用跟服務器進行交互,拓展類庫Extension主要是以模塊的形式封裝即時通信的一些功能帽撑,如:好友列表泼各,聊天,群聊亏拉,自動連接等等扣蜻。

a) XMPPJID:就是我們用戶的賬號。全稱:用戶名@域名/資源及塘;非全稱:用戶名@域名莽使;資源:設備(iphone等)

b) XMPPStream:是用于跟服務器交互的XML流,也就是我們與后臺數據交互都是通過XMPPStream這個類的笙僚。后面的IQ,Message芳肌,Presence都可以看做是stream流的一種節(jié)點類型(節(jié)點就是xml格式當中類似于字典的鍵)

c) XMPPIQ:查詢節(jié)點(info Query),類似于HTTP請求,查詢請求都屬于這個類型亿笤。

d) XMPPMessage:消息節(jié)點檬嘀,發(fā)送的消息都屬于這個類型。

e) XMPPPresence(出席)责嚷,實際上就是登錄狀態(tài),隱身在線 繁忙等

f) XMPPElement:XML基本元素:節(jié)點

  1. XMPP常用的模塊:心跳檢測(XMPPAutoPing)掂铐、重連(XMPPReconnect)罕拂、花名冊(XMPPRoster)、聊天記錄(XMPPMessageArchiving)全陨、文件收發(fā)爆班、頭像模塊、群聊辱姨,使用步驟1.生成模塊(創(chuàng)建柿菩,設置代理);2.配置模塊(配置參數);3.激活模塊。

  2. 各個功能的實現步驟

a) 登錄

     i.     實例化XMPPStraem雨涛,設置IP和端口號枢舶、代理 XMPPStraem alloc]init] hostname,hostPort

    ii.     流連接服務器:設置JID(用戶名、域名替久、資源名)凉泄,然后連接服務器,connect

   iii.      連接服務器成功蚯根,驗證密碼:authenticate

    iv.     驗證密碼成功后众,設置出席(上線):sendElement

b) 注冊功能:設置JID連接服務器成功后,注冊JID:registerWithPassword

c) 心跳檢測:實例化心跳檢測模塊對象颅拦;添加代理蒂誉;配置ping頻率和超時時間;指定激活stream流距帅。

d) 自動重連:實例化模塊右锨;配置是否自動重連和重連時間;激活锥债;

e) 好友列表:獲取單例好友存儲器陡蝇,根據存儲器實例化好友模塊對象,配置(接受好友添加哮肚、自動獲取好友)登夫,激活模塊。

     i.     獲取好友列表使用NSFetchedResultsController
  1. 創(chuàng)建查詢請求:NSFetchRequest允趟,實體“XMPPUserCoreDataStorageObject“

  2. 設置排序恼策、設置謂詞(subscription == 'both‘)

  3. 初始化NSFetchedResultsController

    ii. 獲取群列表

  4. 向服務器發(fā)送一個獲取群列表IQ請求

  5. 在代理方法中得到iq響應

  6. 遍歷數組

f) 聊天記錄

g) 文件發(fā)送:實例文件模塊、配置、激活

     i.     將圖片轉換成二進制

    ii.     寫入沙盒涣楷,獲取路徑

   iii.      發(fā)送[kHMXMPPManager.xmppOutgoingFileTransfer sendData:imgData named:name

    iv.     添加subject用于識別圖片:message addSubject:@“IMAGE”;

     v.     接收到文件在代理中《xmppIncomingFileTransfer》分唾,實現獲取沙盒路徑寫入文件。

h) 群聊功能:群聊結構分三層狮斗,openfire服務器绽乔,群聊服務器,群聊服務器的房間

     i.     一般使用一個單例管理類來管理群聊功能碳褒。

    ii.     實現加入到房間方法:從字典緩存判斷房間是否存在折砸,不存在創(chuàng)建,激活沙峻,加入緩存睦授,然后加入。
  1. 融云SDK介紹:特點是無需改變現有App的架構摔寨,直接嵌入現有代碼框架中去枷,無需改變現有服務器架構,直接部署一份用于用戶授權的服務器即可是复,集成簡單
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末删顶,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子佑笋,更是在濱河造成了極大的恐慌翼闹,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒋纬,死亡現場離奇詭異猎荠,居然都是意外死亡,警方通過查閱死者的電腦和手機蜀备,發(fā)現死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門关摇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碾阁,你說我怎么就攤上這事输虱。” “怎么了脂凶?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵宪睹,是天一觀的道長。 經常有香客問我蚕钦,道長亭病,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任嘶居,我火速辦了婚禮罪帖,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己整袁,他們只是感情好菠齿,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坐昙,像睡著了一般绳匀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炸客,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天襟士,我揣著相機與錄音,去河邊找鬼嚷量。 笑死,一個胖子當著我的面吹牛逆趣,可吹牛的內容都是我干的蝶溶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼宣渗,長吁一口氣:“原來是場噩夢啊……” “哼抖所!你這毒婦竟也來了?” 一聲冷哼從身側響起痕囱,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤田轧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鞍恢,有當地人在樹林里發(fā)現了一具尸體傻粘,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年帮掉,在試婚紗的時候發(fā)現自己被綠了弦悉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟆炊,死狀恐怖稽莉,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情涩搓,我是刑警寧澤污秆,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站昧甘,受9級特大地震影響良拼,放射性物質發(fā)生泄漏。R本人自食惡果不足惜疾层,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一将饺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦予弧、人聲如沸刮吧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽杀捻。三九已至,卻和暖如春蚓庭,著一層夾襖步出監(jiān)牢的瞬間致讥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工器赞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垢袱,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓港柜,卻偏偏與公主長得像请契,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子夏醉,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容

  • XMPP簡介 XMPP協議簡介 XMPP協議(Extensible Messaging and PresenceP...
    不規(guī)則先生閱讀 6,295評論 2 31
  • 關于XMPP最權威的講解:http://www.jabbercn.org/RFC3920(這個才是最權威的爽锥,下面文...
    隨風飄蕩的小逗逼閱讀 1,466評論 1 5
  • 要學習基于XMPP協議的IM開發(fā),首先要熟悉XMPP協議本身畔柔。 XMPP協議的組成主要的XMPP 協議范本及當今應...
    RichieQ閱讀 1,889評論 0 6
  • 前面關于即時通訊基礎Socket,大家學習使用XMPP之前可以先看看即時通訊系列之Socket簡介 前言 前段時間...
    音符上的碼字員閱讀 4,202評論 3 16
  • XMPP簡介 原理 概述XMPP(可擴展消息處理現場協議)是基于可擴展標記語言(XML)的協議氯夷,它用于即時消息(I...
    樂小文閱讀 6,178評論 1 9