iOS 即時通訊XMPP

現(xiàn)在很多社交軟件都很火,F(xiàn)aceBook、易信、陌陌等,QQ、微信當(dāng)然依然是中文社交最大霸主。除此之外伙星也很火。除了社交軟件用到即時通訊,商城類的軟件也會涉及到買家與賣家的商談,還有美食類軟件,一般都會有評論,有用戶之間的交流等等,幾乎有用戶資源的軟件都會有即時通訊的需求。因此,即時通訊也是很重要的,不管目前所在的公司是否重視,但作為一個開發(fā)者不得小視。今天給大家聊一下即時通訊相關(guān)的內(nèi)容。大家可以相互交流學(xué)習(xí)一下。

一、定義

XMPP(可擴展消息處理現(xiàn)場協(xié)議)是基于可擴展標(biāo)記語言(XML)的協(xié)議,它用于即時消息(IM)以及在線現(xiàn)場探測。它繼承了在XML環(huán)境中靈活的發(fā)展性。因此,基于XMPP的應(yīng)用具有超強的可擴展性。經(jīng)過擴展以后的XMPP可以通過發(fā)送擴展的信息來處理用戶的需求,以及在XMPP的頂端建立如內(nèi)容發(fā)布系統(tǒng)和基于地址的服務(wù)等應(yīng)用程序。而且,XMPP包含了針對服務(wù)器端的軟件協(xié)議,使之能與另一個進行通話,這使得開發(fā)者更容易建立客戶應(yīng)用程序或給一個配好系統(tǒng)添加功能。

通俗的來說,其實XMPP 是一種很類似于http協(xié)議的一種數(shù)據(jù)傳輸協(xié)議,它的過程就如同“解包裝--〉包裝”的過程,用戶只需要明白它接收的類型,并理解它返回的類型,就可以很好的利用xmpp來進行數(shù)據(jù)通訊。

二、基本網(wǎng)絡(luò)結(jié)構(gòu)

XMPP中定義了三個角色,客戶端,服務(wù)器,網(wǎng)關(guān),通信能夠在這三者的任意兩個之間雙向發(fā)生。服務(wù)器同時承擔(dān)了客戶端信息記錄,連接管理和信息的路由功能。網(wǎng)關(guān)承擔(dān)著與異構(gòu)即時通信系統(tǒng)的互聯(lián)互通,基本的網(wǎng)絡(luò)形式是單客戶端通過TCP/IP,UDP連接到單服務(wù)器,然后在之上傳輸XML

三、功能

傳輸?shù)氖桥c即時通訊相關(guān)的指令。在以前這些命令要么用2進制的形式發(fā)送(比如QQ),要么用純文本指令加空格加參數(shù)加換行符的方式發(fā)送(比如MSN)。而XMPP傳輸?shù)募磿r通訊指令的邏輯與以往相仿,只是協(xié)議的形式變成了XML格式的純文本

四、優(yōu)缺點? ? ? ? OpenFire服務(wù)器

優(yōu)點:XMPP協(xié)議是自由、開放、公開的,并且易于了解。而且在客戶端、服務(wù)器、組件、源碼庫等方面,都已經(jīng)各自有多種實現(xiàn)。XMPP除了可用在實時通信的應(yīng)用程序,還能用在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、文件共享、游戲、遠程系統(tǒng)監(jiān)控等。

缺點:XMPP協(xié)議的方式被編碼為一個單一的長的XML文件,因此無法提供修改二進制數(shù)據(jù)。

五、第三方


即時通訊開發(fā)通常都是用的第三方,目前主要有環(huán)信、融云。

1.環(huán)信:http://www.easemob.com

目前創(chuàng)建群組支持的配置屬性有:

1 群名稱

2 群描述

3 群人數(shù)(不支持修改,目前上限為2000人)

4 群類型(即上面提到的四種群組類型)

群組分4種類型,目前SDK不支持自主選擇是否進群。我們將針對每種類型講解加入群組要進行的操作。

1 eGroupStyle_PrivateOnlyOwnerInvite 該類型的群組只允許群主(owner)添加人進群,其他人無法主動加入。

2 eGroupStyle_PrivateMemberCanInvite (推薦使用),該類型的群組允許所有群成員添加人進群,其他人無法主動加入。

3 eGroupStyle_PublicJoinNeedApproval (推薦使用),該類型的群組只允許群主(owner)添加人進群;其他人想進入群組的話,需要先發(fā)送申請,群主同意申請之后才能進群;其他人無法主動加入。

4 eGroupStyle_PublicOpenJoin (不推薦使用),該類型的群組允許任何人主動加入群組。

聊天室”模型:

1 進入聊天頁面之前,進行加入聊天室操作;

2 成功進入聊天室之后,服務(wù)器會自動給推10條消息;

3 離開聊天頁面之后,進行退出聊天室操作;

4 聊天室創(chuàng)建者owner可以進行退出聊天室操作;

5 支持最大成員5000;

6 環(huán)信的聊天室內(nèi)僅有owner和游客;

7 不支持客戶端建立聊天室;

8 不支持客戶端邀請;

9 不支持REST邀請;

10 聊天室內(nèi)成員離線后,服務(wù)器當(dāng)監(jiān)聽到此成員不在線后不在會給此成員再發(fā)推送。

2.融云:http://www.rongcloud.cn

借助第三方開發(fā)一般 只有SDK文檔能夠讀懂,開發(fā)方面都沒有太大問題,除非官方網(wǎng)站很久沒更新文檔了,新的界面和文檔對不上或者有很多的錯誤。這才是最坑的。所以這方面平時多看有坑的就需要借助論壇來解決了,大家的力量才是巨大的。


下面介紹一下Socket相關(guān)概念

一、概念

網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換,這個連接的一端就被稱為一個socket

Socket的英文原意指的是“孔”或者“插座”,專業(yè)術(shù)語被稱為“套接字”,用于描述IP地址和端口,可以用來實現(xiàn)不同虛擬機或不同計算機之間的通信。應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求。

二、舉例說明

比如:Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節(jié)目。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務(wù)

對于一個網(wǎng)絡(luò)連接來說,套接字是平等的,并沒有差別,不會因為是服務(wù)器端或者客戶端而產(chǎn)生不同的級別。

三、主要參數(shù)

區(qū)分不同應(yīng)用程序進程間的網(wǎng)絡(luò)通信和連接,主要有3個參數(shù):通信的目的IP地址、使用的傳輸層協(xié)議(TCP或UDP)和使用的端口號,通過將這三個參數(shù)結(jié)合起來,與一個Socket綁定,應(yīng)用層就可以和傳輸層通過套接字接口,區(qū)分來自不同應(yīng)用程序進程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。

Socket可以看成兩個程序進行通訊連接中的一個端點,是連接應(yīng)用程序和網(wǎng)絡(luò)驅(qū)動程序的橋梁,Socket在應(yīng)用程序中創(chuàng)建,通過綁定與網(wǎng)絡(luò)驅(qū)動建立關(guān)系。此后,應(yīng)用程序發(fā)送給Socket的數(shù)據(jù),由Socket交給網(wǎng)絡(luò)驅(qū)動程序向網(wǎng)絡(luò)上發(fā)送出去,計算機從網(wǎng)絡(luò)上收到與該Socket綁定IP地址和端口號相關(guān)的數(shù)據(jù)后,由網(wǎng)絡(luò)驅(qū)動程序交給Socket,應(yīng)用程序便可從該Socket中提取接收到的數(shù)據(jù),網(wǎng)絡(luò)應(yīng)用程序就是這樣通過Socket進行數(shù)據(jù)的發(fā)送與接收。

三、連接過程

要通過Internet進行通信,至少需要一對套接字,其中一個運行在客戶端,稱之為ClientSocket,另一個運行在服務(wù)器端,稱之為ServerSocket,根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)

(1)服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)

(2)客戶端請求: 是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字,為此,客戶端的套接字必須首先描述他要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的IP地址和端口號,然后就向服務(wù)器端套接字提出連接請求。

(3)連接確認(rèn):是指服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了,而服務(wù)器端套接字仍然處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求

四、數(shù)據(jù)處理

使用套接字進行數(shù)據(jù)處理有兩種基本模式:同步模式和異步模式

(1) 同步模式:特點是在通過Socket進行連接、接收、發(fā)送數(shù)據(jù)時,客戶機和服務(wù)器在接收對方響應(yīng)前會處于阻塞狀態(tài),即一直等待收到對方請求后才繼續(xù)執(zhí)行下面的語句,如此可見,同步模式只適用于數(shù)據(jù)處理不太多的場合,當(dāng)程序執(zhí)行的任務(wù)很多時,長時間的等待可能會讓用戶無法忍受。

(2) 異步模式:特點是在通過Socket進行連接、接收、發(fā)送操作時,客戶機和服務(wù)器不會處于阻塞方式,而是利用callback機制進行連接、接收、發(fā)送處理,這樣就可以在調(diào)用發(fā)送或接收的方法后直接返回,并繼續(xù)執(zhí)行下面的程序,由此可見,異步套接字特別適用于進行大量數(shù)據(jù)處理的場合。

五、TCP和UDP

TCP和UDP的區(qū)別? 各有什么優(yōu)缺點

1、TCP

TCP(傳輸控制協(xié)議)是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。一個TCP連接必須經(jīng)過三次“對話”才能建立起來,其中的過程非常復(fù)雜,簡單地過程如下:

A —> B? 主機A向主機B發(fā)出連接請求數(shù)據(jù)包,這是第一次對話

A <—B 主機B向主機A發(fā)送同意連接和要求同步(同步就是兩臺主機一個在發(fā)送,一個在接收,協(xié)調(diào)工作),這是第二次對話

A —> B 主機A再發(fā)出一個數(shù)據(jù)包確認(rèn)主機B的要求同步,這是第三次對話

TCP接通連接要進行3次握手過程? ??

1、主機A通過向主機B 發(fā)送一個含有同步序列號的標(biāo)志位的數(shù)據(jù)段給主機B ,向主機B 請求建立連接,通過這個數(shù)據(jù)段,

主機A告訴主機B 兩件事:我想要和你通信;你可以用哪個序列號作為起始數(shù)據(jù)段來回應(yīng)我.

2、 主機B 收到主機A的請求后,用一個帶有確認(rèn)應(yīng)答(ACK)和同步序列號(SYN)標(biāo)志位的數(shù)據(jù)段響應(yīng)主機A,也告訴主機A兩件事:我已經(jīng)收到你的請求了,你可以傳輸數(shù)據(jù)了;你要用哪佧序列號作為起始數(shù)據(jù)段來回應(yīng)我

3、 主機A收到這個數(shù)據(jù)段后,再發(fā)送一個確認(rèn)應(yīng)答,確認(rèn)已收到主機B 的數(shù)據(jù)段:我已收到回復(fù),我現(xiàn)在要開始傳輸實際數(shù)據(jù)了

這樣3次握手就完成了,主機A和主機B 就可以傳輸數(shù)據(jù)了.

三次握手的特點:沒有應(yīng)用層的數(shù)據(jù);

SYN這個標(biāo)志位只有在TCP建立連接時才會被置1;

握手完成后SYN標(biāo)志位被置0

涉及到的名詞解釋:

ACK TCP報頭的控制位之一,對數(shù)據(jù)進行確認(rèn).確認(rèn)由目的端發(fā)出,用它來告訴發(fā)送端這個序列號之前的數(shù)據(jù)段

都收到了.比如,確認(rèn)號為X,則表示前X-1個數(shù)據(jù)段都收到了,只有當(dāng)ACK=1時,確認(rèn)號才有效,當(dāng)ACK=0時,確認(rèn)號無效,這時會要求重傳數(shù)據(jù),保證數(shù)據(jù)的完整性.

SYN 同步序列號,TCP建立連接時將這個位置1

FIN 發(fā)送端完成發(fā)送任務(wù)位,當(dāng)TCP完成數(shù)據(jù)傳輸需要斷開時,提出斷開連接的一方將這位置1

2、UDP

UDP(用戶數(shù)據(jù)報協(xié)議)是非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段。

UDP的特點:

1)由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺服務(wù)機可同時向多個客戶機傳輸相同的消息。

2) UDP信息包的標(biāo)題很短,只有8個字節(jié),相對于TCP的20個字節(jié)信息包的額外開銷很小。 3)吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機性能的限制

4)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復(fù)雜的鏈接狀態(tài)表(這里面有許多參數(shù))。

5)UDP是面向報文的。發(fā)送方的UDP對應(yīng)用程序交下來的報文,在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報文的邊界,因此,應(yīng)用程序需要選擇合適的報文大小。

3、TCP和UDP的區(qū)別

1.基于連接與無連接; 2.對系統(tǒng)資源的要求(TCP較多,UDP少); 3.UDP程序結(jié)構(gòu)較簡單; 4.流模式與數(shù)據(jù)報模式 ;

5.TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自 TCP/IP,Http,Socket,XMPP的區(qū)別網(wǎng)絡(luò)由下往上分為 物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會...
    ZMJun閱讀 1,420評論 1 10
  • 定義 網(wǎng)絡(luò)協(xié)議為計算機網(wǎng)絡(luò)中進行數(shù)據(jù)交換而建立的規(guī)則、標(biāo)準(zhǔn)或約定的集合。網(wǎng)絡(luò)協(xié)議主要由三個要素組成:語義、語法及時...
    FlyAndroid閱讀 1,113評論 0 10
  • 參考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麥子閱讀 3,069評論 0 14
  • 這兩天,各種傳媒板塊都被青年演員喬任梁辭世的新聞給刷了屏,盡管有些媒體口口聲聲說逝者為大,不要去刻意如何如何,但某...
    勃然滄海閱讀 168評論 0 0
  • 我總感覺,人啊,不能老閑著,閑著,就會閑出毛病。我所在的公司,辛辛苦苦一個月,這個繁忙的6月,終于是在不久前遠走,...
    文君1閱讀 292評論 0 1

友情鏈接更多精彩內(nèi)容