天天看點

WebSocket 和socket、HTTP的差別和聯系

一、WebSocket 是什麼? 

WebSocket是HTML5規範提出的一種協定;目前除了完犢子的IE浏覽器,其他浏覽器都基本支援。他是一種協定,萬變不離其宗,也是基于TCP協定的;和HTTP協定是并存的兩種協定。 

WebSocket是HTML5中的協定。HTML5 Web Sockets規範定義了Web Sockets API,支援頁面使用Web Socket協定與遠端主機進行全雙工的通信。它引入了WebSocket接口并且定義了一個全雙工的通信通道,通過一個單一的套接字在Web上進行操作。HTML5 Web Sockets以最小的開銷高效地提供了Web連接配接。相較于經常需要使用推送實時資料到用戶端甚至通過維護兩個HTTP連接配接來模拟全雙工連接配接的舊的輪詢或長輪詢(Comet)來說,這就極大的減少了不必要的網絡流量與延遲。 

要使用HTML5 Web Sockets從一個Web用戶端連接配接到一個遠端端點,你要建立一個新的WebSocket執行個體并為之提供一個URL來表示你想要連接配接到的遠端端點。該規範定義了ws://以及wss://模式來分别表示WebSocket和安全WebSocket連接配接,這就跟http:// 以及https:// 的差別是差不多的。一個WebSocket連接配接是在用戶端與伺服器之間HTTP協定的初始握手階段将其更新到Web Socket協定來建立的,其底層仍是TCP/IP連接配接。

二、WebSocket與Socket的關系

Socket其實并不是一個協定,而是為了友善使用TCP或UDP而抽象出來的一層,是位于應用層和傳輸控制層之間的一組接口。

“Socket是應用層與TCP/IP協定族通信的中間軟體抽象層,它是一組接口,提供一套調用TCP/IP協定的API。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協定族隐藏在Socket接口後面,對使用者來說,一組簡單的接口就是全部,讓Socket去組織資料,以符合指定的協定。”

當兩台主機通信時,必須通過Socket連接配接,Socket則利用TCP/IP協定建立TCP連接配接。TCP連接配接則更依靠于底層的IP協定,IP協定的連接配接則依賴于鍊路層等更低層次。

WebSocket就像HTTP一樣,則是一個典型的應用層協定。 

WebSocket 和socket、HTTP的差別和聯系

總結:

Socket是傳輸控制層接口,WebSocket是應用層協定。
           

三、WebSocket與HTTP的關系 

關系圖: 

WebSocket 和socket、HTTP的差別和聯系

相同點

  1. 都是一樣基于TCP的,都是可靠性傳輸協定。

  2. 都是應用層協定。

不同點

  1. WebSocket是雙向通信協定,模拟Socket協定,可以雙向發送或接受資訊。HTTP是單向的。

  2. WebSocket是需要浏覽器和伺服器握手進行建立連接配接的。而http是浏覽器發起向伺服器的連接配接,伺服器預先并不知道這個連接配接。

聯系

WebSocket在建立握手時,資料是通過HTTP傳輸的。但是建立之後,在真正傳輸時候是不需要HTTP協定的。 

總結:

在WebSocket中,隻需要伺服器和浏覽器通過HTTP協定進行一個握手的動作,然後單獨建立一條TCP的通信通道進行資料的傳送。 

WebSocket連接配接的過程是:

  1. 首先,用戶端發起http請求,經過3次握手後,建立起TCP連接配接;http請求裡存放WebSocket支援的版本号等資訊,如:Upgrade、Connection、WebSocket-Version等;

  2. 然後,伺服器收到用戶端的握手請求後,同樣采用HTTP協定回饋資料;

  3. 最後,用戶端收到連接配接成功的消息後,開始借助于TCP傳輸信道進行全雙工通信。

繼續閱讀