玩轉(zhuǎn)即時通訊

先了解一些基本概念————

<h5>Socket</h5>

  • Socket又稱“套接字”
  • 網(wǎng)絡(luò)上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換袒啼,這個鏈接的一端成為socket
  • 應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求


    Socket.png

<h5>網(wǎng)絡(luò)通信的要素</h5>

  • 網(wǎng)絡(luò)上的請求就是通過Socket來建立鏈接然后互相通信
  • IP地址(網(wǎng)絡(luò)上主機設(shè)備的唯一標識)
  • 端口號(定位程序)
    • 用于標示進程的邏輯地址饥侵,不同進程的表示
    • 有效端口:0~65535卧惜,其中0~1024由系統(tǒng)使用或者保留端口心褐,開發(fā)中建議使用1024以上的端口
  • 傳輸協(xié)議(用什么樣的方式進行交互)
    • 通訊的規(guī)則
    • 常見協(xié)議:TCP肆糕、UDP

<h5>TCP&UDP</h5>

  • TCP(傳輸控制協(xié)議)
    • 建立連接藻懒,形成傳輸數(shù)據(jù)的通道
    • 在連接中進行大數(shù)據(jù)傳輸(數(shù)據(jù)大小不受限制)
    • 通過三次握手完成連接却邓,是可靠協(xié)議镀琉,安全送達
    • 必須建立連接峦嗤,效率會稍低
  • UDP(用戶數(shù)據(jù)報協(xié)議)
    • 將數(shù)據(jù)及源和目的封裝成數(shù)據(jù)包中,不需要建立連接
    • 每個數(shù)據(jù)報的的大小限制在64k之內(nèi)
    • 因為無需連接屋摔,因此是不可靠協(xié)議
    • 不需要建立連接烁设,速度快

<h5>Socket通信流程圖</h5>

Socket通信流程圖.png

<h5>實現(xiàn)Socket服務(wù)端監(jiān)聽</h5>

  • 實現(xiàn)socket監(jiān)聽的方法
    • 使用C語言實現(xiàn)
    • 使用CocoaAsyncSocket第三方框剪,內(nèi)部是對C的封裝
  • Telnet命令telnet host port/telnet 192.168.10.10 5288
    • telnet命令是連接服務(wù)器上的某個端口對應(yīng)的服務(wù)

<h5>Socket層上的協(xié)議</h5>

  • Socket層上的協(xié)議指的數(shù)據(jù)傳輸?shù)母袷?/li>
  • HTTP協(xié)議:
    傳輸格式:假設(shè)钓试;這是個假設(shè)装黑,實際http的格式不是這樣的
  http1.1,`content-type`:multipart/form-data,`content-length`:188,body:username=zhangsan&password=123456
  • XMPP協(xié)議,是一款即時通訊協(xié)議
    可擴展消息處理現(xiàn)場協(xié)議弓熏,是基于可擴展標記語言(XML)的協(xié)議曹体,它用于即時消息(IM)以及在線現(xiàn)場探測。這個協(xié)議可能最終允許可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息
傳輸格式:
<from>Vincent</from>
<to>Eli</to>
<body>一起吃飯</body>
  • 自定義即時通訊協(xié)議:JSON格式

{
"from" : "Vincent",
"to" : "Eli",
"body" : "中午一起吃飯"
}


><h5>即時通許</h5>

- 即時通許硝烂,又稱實時通訊
- 即時通訊(Instant Messaging箕别,簡稱IM)是一個`實時通信`系統(tǒng),允許兩人或多人使用網(wǎng)絡(luò)實時的傳遞文字信息滞谢、文件串稀、語言與視頻交流
- 即時通訊在開發(fā)中使用的場景
  - 開發(fā)一個類似于微信,QQ的聊天軟件
  - 在電商APP集成買家與賣家的實時溝通等
- 當前時下狮杨,實現(xiàn)即時通許的方案
  - XMPP
  - `環(huán)信` 就是在xmppframework+openfire的基礎(chǔ)上進行的二次開發(fā)
  - `親加母截、融云、網(wǎng)易云橄教、友盟… …`

><h5>XMPP</h5>

- XMPP: The Extensible Messaging and Presence Protocol(可擴展通訊和表示協(xié)議)
- XMPP是一種基于`XML(可擴展標記語言)的即時通訊協(xié)議`清寇,XMPP的官方文檔是RFC 3920
  - 這個文檔定義了登錄,退出护蝶,獲取好友华烟,發(fā)送消息等等的`XML數(shù)據(jù)傳輸協(xié)議`
- XMPP是一個典型的`C/S`框架,基本的網(wǎng)絡(luò)形式是`客戶端通過TCP/IP連接到服務(wù)器`持灰,通過Socket建立連接盔夜,然后再之上傳輸XML流
- XMPP是一種類似于HTTP協(xié)議的一種`數(shù)據(jù)傳輸協(xié)議`,其過程就如同“解包裝-->包裝”的過程,只需要理解其接收的類型及返回的類型喂链,便可以很好的利用XMPP來進行數(shù)據(jù)通訊
- XMPP官方網(wǎng)站——http://xmpp.org

><h5>XMPP實現(xiàn)即時通信的準備工作</h5>

- 下載Openfire服務(wù)器
- 下載XMPPFrameWork框架
![XMPP實現(xiàn)即時通信的準備工作.png](http://upload-images.jianshu.io/upload_images/3960806-d2aaa1072ccdc09e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

><h5>`面試題:是否使用過XMPP返十,XMPP的實現(xiàn)原理`</h5>

- XMPP是一個即時通訊的協(xié)議,`它定義好用于即時通訊在網(wǎng)絡(luò)上數(shù)據(jù)傳輸?shù)母袷絗比如登陸椭微,獲取好友列表等等的格式洞坑。XMPP在網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)是`XML格式`
  - 比如登錄:吧用戶名和密碼放在xml的標簽中,傳輸給服務(wù)器
- XMPP是一個基于Socket通訊的網(wǎng)絡(luò)協(xié)議蝇率,目的是為了保存長連接检诗,以實現(xiàn)即時通訊功能
- XMPP的客戶端是使用一個XMPPFramework框架
- XMPP的服務(wù)器是使用Openfire,一個開源的服務(wù)器
- 假設(shè)客戶端獲取到服務(wù)器發(fā)送過來的好友消息瓢剿,客戶端需要對XML進行解析,使用的解析框架是KissXML框架

><h5>`面試題:在使用XML的時候有沒有遇到什么困難`</h5>

- <b>發(fā)送附件(圖片悠轩,語音间狂,文檔...)時比較麻煩</b>
- XMPP框架沒有提供附件傳送的功能,需要自己實現(xiàn)
  - 實現(xiàn)方法火架,把文件上傳到文件服務(wù)器鉴象,上傳成功后獲取文件保存路徑,再把附件的路徑發(fā)送給好友

><h5>`面試題:是否使用過環(huán)信何鸡,簡單的說下環(huán)信的實現(xiàn)原理`</h5>

- 環(huán)信是一個即時通訊服務(wù)提供商
- 環(huán)信使用的是XMPP協(xié)議纺弊,它是在XMPP的基礎(chǔ)上進行二次開發(fā),對服務(wù)器Openfire和客戶端進行`功能模型的添加`和`客戶端SDK的封裝`骡男,環(huán)信的本質(zhì)還是使用XMPP淆游,基于Socket的網(wǎng)絡(luò)通訊
- 環(huán)信內(nèi)部實現(xiàn)了`數(shù)據(jù)緩存`,會把聊天記錄添加到數(shù)據(jù)庫隔盛,把附件下載到本地犹菱,程序猿更多時間是花到`界面用戶體驗上`
- 環(huán)信內(nèi)部已經(jīng)實現(xiàn)了視頻,音頻吮炕,圖片腊脱,其他附件發(fā)送功能
- 使用環(huán)信可以節(jié)約時間成本
  - 不需要公司內(nèi)部搭建服務(wù)器
  - 客戶端的開發(fā),使用環(huán)信SDK比使用XMPPFramework更簡潔方便
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末龙亲,一起剝皮案震驚了整個濱河市陕凹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鳄炉,老刑警劉巖杜耙,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拂盯,居然都是意外死亡泥技,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊豹,“玉大人簸呈,你說我怎么就攤上這事〉瓴瑁” “怎么了蜕便?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長贩幻。 經(jīng)常有香客問我轿腺,道長,這世上最難降的妖魔是什么丛楚? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任族壳,我火速辦了婚禮,結(jié)果婚禮上趣些,老公的妹妹穿的比我還像新娘仿荆。我一直安慰自己,他們只是感情好坏平,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布拢操。 她就那樣靜靜地躺著,像睡著了一般舶替。 火紅的嫁衣襯著肌膚如雪令境。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天顾瞪,我揣著相機與錄音舔庶,去河邊找鬼。 笑死陈醒,一個胖子當著我的面吹牛栖茉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孵延,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吕漂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了尘应?” 一聲冷哼從身側(cè)響起惶凝,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎犬钢,沒想到半個月后苍鲜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡玷犹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年混滔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坯屿,死狀恐怖油湖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情领跛,我是刑警寧澤乏德,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站吠昭,受9級特大地震影響喊括,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矢棚,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一郑什、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒲肋,春花似錦蘑拯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舱沧。三九已至妹沙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熟吏,已是汗流浹背距糖。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牵寺,地道東北人悍引。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像帽氓,于是被迫代替她去往敵國和親趣斤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容