最近公司項目不是很緊張,于是就想學習一下即時通訊方面的知識,用作學習的筆記。本人文筆有限,寫的不好請見諒,今天先來個開篇,介紹一些IM用到的概念。
1.WebSocket
“WebSocket protocol是HTML5一種新的協議。它實現了瀏覽器與服務器全雙工通信(full-duplex)。一開始的握手需要借助HTTP請求完成。” ——百度百科
a.目的:即時通訊,替代輪詢
網站上的即時通訊技術很常見,比如網頁的QQ等。按照以往的技術能力通常采用輪詢技術解決。
HTTP協議是非持久的、單向的網絡協議,在建立連接后,只允許客戶端向服務器發出請求后,服務器才能返回相應的數據。當需要即時通訊時,通過輪詢在特定時間間隔(如1秒),由瀏覽器向服務器發送Request請求,然后將最新的數據返回給瀏覽器。這種方法最明顯的缺點就是需要不斷的發送請求,而且HTTP HEAD是非常長的,為了傳輸一個很小的數據需要付出巨大的代價,很不劃算,占用了很多帶寬。
然而WebSocket的出現可以彌補這一缺點。在WebSocket中,只需要服務端和瀏覽器通過HTTP協議進行一個握手的動作,然后單獨建立一條TCP的通信通道進行數據傳輸。
**b.原理
**
WebSocket同HTTP一樣,也是應用層
的協議,但是他是一種雙向通信協議,是建立在TCP之上的。
c.連接過程 —— 握手過程
(1)瀏覽器和服務器建立TCP連接,這是基礎;
(2)TCP連接成功后,瀏覽器通過HTTP協議
向服務器發送WebSocket支持的版本號等信息。
(3)服務器收到客戶端的握手請求后,同樣采用HTTP協議
回饋數據。
(4)當收到連接成功的消息后,通過TCP通道進行數據傳輸。
d.WebSocket與HTTP的關系
相同點:
(1)都是基于TCP的,都是可靠性傳輸協議;
(2)都是應用層協議
不同點:
(1)WebSocket是雙向通信協議,模擬Socket協議,可以雙向發送或接收信息。HTTP是單向的。
(2)WebSocket是需要握手進行建立連接的。
注意:WebSocket在握手時,數據是通過HTTP協議傳輸的。但是建立連接后,真正傳輸數據時,是不需要HTTP協議的。
2.Socket
“網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個Socket” —— 百度百科
Socket其實并**不是一個協議
,而是為了方便使用TCP或UDP而抽象出來的一層,是位于應用層與傳輸層之間
的一組接口
**。
Socket與WebSocket關系:
相同點:
都能實現雙向通信;
不同點:
(1)WebSocket是一種協議,而Socket是一組接口;
(2)WebSocket是應用層協議,而Socket是位于傳輸層與應用層之間的抽象層;
(3)WebSocket在傳輸數據之前需要進行握手操作,而Socket不需要。