最近公司項目不是很緊張,于是就想學(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與WebSocket關(guān)系:
相同點:
都能實現(xiàn)雙向通信;
不同點:
(1)WebSocket是一種協(xié)議,而Socket是一組接口;
(2)WebSocket是應(yīng)用層協(xié)議,而Socket是位于傳輸層與應(yīng)用層之間的抽象層;
(3)WebSocket在傳輸數(shù)據(jù)之前需要進行握手操作,而Socket不需要。