iOS 即時通訊(一):HTTP、Socket與WebSocket

最近公司項目不是很緊張,于是就想學(xué)習(xí)一下即時通訊方面的知識,用作學(xué)習(xí)的筆記。本人文筆有限,寫的不好請見諒,今天先來個開篇,介紹一些IM用到的概念。

1.WebSocket

“WebSocket protocol是HTML5一種新的協(xié)議。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成。” ——百度百科

a.目的:即時通訊,替代輪詢

網(wǎng)站上的即時通訊技術(shù)很常見,比如網(wǎng)頁的QQ等。按照以往的技術(shù)能力通常采用輪詢技術(shù)解決。

HTTP協(xié)議是非持久的、單向的網(wǎng)絡(luò)協(xié)議,在建立連接后,只允許客戶端向服務(wù)器發(fā)出請求后,服務(wù)器才能返回相應(yīng)的數(shù)據(jù)。當(dāng)需要即時通訊時,通過輪詢在特定時間間隔(如1秒),由瀏覽器向服務(wù)器發(fā)送Request請求,然后將最新的數(shù)據(jù)返回給瀏覽器。這種方法最明顯的缺點就是需要不斷的發(fā)送請求,而且HTTP HEAD是非常長的,為了傳輸一個很小的數(shù)據(jù)需要付出巨大的代價,很不劃算,占用了很多帶寬。

然而WebSocket的出現(xiàn)可以彌補這一缺點。在WebSocket中,只需要服務(wù)端和瀏覽器通過HTTP協(xié)議進行一個握手的動作,然后單獨建立一條TCP的通信通道進行數(shù)據(jù)傳輸。

**b.原理
**

WebSocket同HTTP一樣,也是應(yīng)用層
的協(xié)議,但是他是一種雙向通信協(xié)議,是建立在TCP之上的。

c.連接過程 —— 握手過程

(1)瀏覽器和服務(wù)器建立TCP連接,這是基礎(chǔ);
(2)TCP連接成功后,瀏覽器通過HTTP協(xié)議
向服務(wù)器發(fā)送WebSocket支持的版本號等信息。
(3)服務(wù)器收到客戶端的握手請求后,同樣采用
HTTP協(xié)議

回饋數(shù)據(jù)。
(4)當(dāng)收到連接成功的消息后,通過TCP通道進行數(shù)據(jù)傳輸。

d.WebSocket與HTTP的關(guān)系

相同點:
(1)都是基于TCP的,都是可靠性傳輸協(xié)議;
(2)都是應(yīng)用層協(xié)議

不同點:
(1)WebSocket是雙向通信協(xié)議,模擬Socket協(xié)議,可以雙向發(fā)送或接收信息。HTTP是單向的。
(2)WebSocket是需要握手進行建立連接的。

注意:WebSocket在握手時,數(shù)據(jù)是通過HTTP協(xié)議傳輸?shù)?。但是建立連接后,真正傳輸數(shù)據(jù)時,是不需要HTTP協(xié)議的。

2.Socket

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

Socket其實并**不是一個協(xié)議
,而是為了方便使用TCP或UDP而抽象出來的一層,是位于應(yīng)用層與傳輸層之間
的一組接口
**。

Socket.gif

Socket與WebSocket關(guān)系:

相同點:
都能實現(xiàn)雙向通信;

不同點:
(1)WebSocket是一種協(xié)議,而Socket是一組接口;
(2)WebSocket是應(yīng)用層協(xié)議,而Socket是位于傳輸層與應(yīng)用層之間的抽象層;
(3)WebSocket在傳輸數(shù)據(jù)之前需要進行握手操作,而Socket不需要。

最后編輯于
?著作權(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)容

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