WebSocket原理與實踐(一)---基本原理

龍恩0707發表於2018-03-04

WebSocket原理與實踐(一)---基本原理

一:為什麼要使用WebSocket?
1. 瞭解現有的HTTP的架構模式:
Http是客戶端/伺服器模式中請求-響應所用的協議,在這種模式中,客戶端(一般是web瀏覽器)向伺服器提交HTTP請求,伺服器響應請求的資源
(例如HTML頁面)和關於頁面的附加資訊。

1-1. HTTP的特點是:
HTTP是半雙工協議,也就是說,在同一時刻流量只能單向流動,客戶端向伺服器傳送請求(單向的),然後伺服器響應請求(單向的)。伺服器不能主動推送資料給瀏覽器。

當初這麼設計也是有原因的,假如伺服器能主動推送資料給瀏覽器的話,那麼瀏覽器很容易受到攻擊,比如一些廣告商會主動把一些廣告資訊強行的傳輸給客戶端。
半雙工的缺點是:效率非常低下。
比如想實現股票的實時行情,火車票的剩餘票數等這些,半雙工協議是無法做到的。

2. 瞭解HTTP輪詢,長輪詢和流化。
一般情況下,瀏覽器訪問網頁時,會向頁面所在的伺服器傳送一個HTTP請求,Web伺服器確認請求並向瀏覽器返回響應。但是像股價,實時新聞等到達瀏覽器
顯示頁面時已經過時了,如果使用者想要得到最新的實時資訊,他們就要不斷的重新整理頁面,這種顯然是不切實際的。

輪詢: 輪詢是通過瀏覽器定時的向web伺服器傳送http的Get請求,伺服器收到請求後,就把最新的資料發回給客戶端,客戶端得到資料後,將其顯示出來,然後再定期的重複這一過程,雖然可以滿足需求,但是存在一些缺點,比如某一段時間內web伺服器沒有更新的資料,但是瀏覽器仍然需要定時的傳送Get請求過來詢問,那麼即浪費了頻寬,又浪費了cpu的利用率。
如下圖:

長輪詢: 客戶端向伺服器請求資訊,並在設定的時間段內開啟一個連線,伺服器如果沒有任何資訊,會保持請求開啟,直到有客戶端可用的資訊,或者直到
指定的超時時間用完為止。這個時候,客戶端會重新向伺服器請求資訊。長輪詢也可以叫做Comet或反向ajax。它會延長HTTP響應的完成,直到伺服器有
需要傳送給客戶端的內容,這種技術通常可以叫 "掛起GET" 或 "擱置POST".

缺點是:
當資訊量非常大的時候,長輪詢相對於http輪詢並沒有明顯的效能優勢,因為客戶端必須頻繁地重連到伺服器以讀取新資訊。造成網路的表現和常規輪詢相同。

如下圖:

流化: 在流化技術中,客戶端傳送一個請求,伺服器傳送並維護一個持續更新和保持開啟的開放響應。每當伺服器有需要交付給客戶端資訊時,它就更新響應
。但是伺服器從不發出完成HTTP響應的請求,從而使連結一直保持開啟。在這種情況下,代理和防火牆可能快取響應,導致資訊交付的延遲增加。
因此許多流化對於存在防火牆和代理的網路是不友好的。

3. 瞭解WebSocket
WebSocket是一種全雙工,雙向,單套接字連線,使用websocket,http請求變成開啟websocket的連結的單一請求,並且重用從客戶端到伺服器以及
伺服器到客戶端的同一連線。

WebSocket減少了延遲,因為一旦建立起Websocket連線,伺服器可以在訊息可用時傳送他們。和輪詢不同的是:WebSocket只發出一個請求,伺服器
不需要等待來自客戶端的請求,且客戶端可以在任何時候向伺服器端傳送訊息,和輪詢相比的話,不管是否有可用訊息,每隔一段時間都傳送一個請求,
單一請求大大減少了延遲。

優點有如下:
1. WebSocket使實時通訊更加有效。能節約頻寬,CPU資源並減少延遲。
2. WebSocket使Web上客戶端和伺服器之間的通訊變得更加的簡單。
3. Websocket是一個底層網路協議,我們可以在它的基礎之上構建其他的標準協議。

WebSocket的應用場景?
比如聊天,大型多人線上遊戲,股票交易應用或實時新聞等。

二:瞭解WebSocket的相關API

見如下文章: http://www.cnblogs.com/tugenhua0707/p/8395669.html

相關文章