理解websocket

OSI 模型與TCP/IP

開放式系統互聯通信參考模型(英語:Open System Interconnection Reference Model,ISO/IEC 7498-1),簡稱爲OSI模型。

分爲7層,分別爲爲:物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。

TCP/IP 參考模型可以看做是對 OSI 模型的一種簡化,它將軟件通信過程抽象化爲四個抽象層。

1-4層爲:網絡接口層,網絡層,傳輸層,應用層。

下圖很好的詮釋了OSI模型。

HTTP協議

HTTP分爲短連接和長連接

在HTTP/1.0中默認使用短連接。也就是說,客戶端和服務器每進行一次HTTP操作,就建立一次連接,任務結束就中斷連接。當客戶端瀏覽器訪問的某個HTML或其他類型的Web頁中包含有其他的Web資源(如JavaScript文件、圖像文件、CSS文件等),每遇到這樣一個Web資源,瀏覽器就會重新建立一個HTTP會話。

而從HTTP/1.1起,默認使用長連接,用以保持連接特性。使用長連接的HTTP協議,會在響應頭加入這行代碼:Connection:keep-alive

在使用長連接的情況下,當一個網頁打開完成後,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,客戶端再次訪問這個服務器時,會繼續使用這一條已經建立的連接。Keep-Alive不會永久保持連接,它有一個保持時間,可以在不同的服務器軟件(如Apache)中設定這個時間。實現長連接需要客戶端和服務端都支持長連接。

HTTP協議的長連接和短連接,實質上是TCP協議的長連接和短連接。

WebScoket

WebSocket是HTML5開始提供的一種在單個TCP連接上進行全雙工通訊的協議

WebSocket是用於在Web瀏覽器和服務器之間進行任意的雙向數據傳輸的一種技術。WebSocket協議基於TCP協議實現,包含初始的握手過程,以及後續的多次數據幀雙向傳輸過程。其目的是在WebSocket應用和WebSocket服務器進行頻繁雙向通信時,可以使服務器避免打開多個HTTP連接進行工作來節約資源,提高了工作效率和資源利用率。

WebSocket、HTTP 與 TCP

HTTP、WebSocket都是應用層協議,都是基於TCP協議來傳輸數據的。可以把這些高級協議理解成對 TCP 的封裝。

既然都是使用TCP協議,那麼HTTP和WebSocket的連接和斷開,都要遵循 TCP 協議中的三次握手和四次揮手 ,只是在連接之後發送的內容不同和斷開的時間不同。

WebSocket、HTTP 的區別

HTTP 協議是一種無狀態的、無連接的、單向的應用層協議。它採用了請求/響應模型。通信請求只能由客戶端發起,服務端對請求做出應答處理。HTTP 協議無法實現服務器主動向客戶端發起消息。

websocket可以實現持久連接,它實現了雙向同時通信。

網頁實時數據更新的方式

爲實現網頁實時數據更新通常使用ajax輪詢和長輪詢,websocket

1.若使用ajax輪詢,每次請求都要建立一個新的連接,HTTP底層使用的是TCP,那麼每次都要使用三次握手建立TCP連接,即每一個request對應一個response,將造成極大的資源浪費

2.長輪詢,即客戶端發送一個超時時間很長的Request,服務器hold住這個連接,在有新數據到達時返回Response。服務器hold連接會消耗資源

3.websocket的持久連接,只需建立一次Request/Response消息對,之後都是TCP連接,避免了需要多次建立Request/Response消息對而產生的冗餘頭部信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章