WebSocket 用法
下面首先以實際需求來引出本文主角WebSocket,然後再分步介紹它的特點。
比如在頁面指定區域會顯示一天的氣溫變化,如果當前氣溫發生變化,伺服器能夠實時推送。
使用HTTP(s)協議也可以實現此效果,但是未免有些笨拙,或者說效能欠佳,下面分步進行分析。
一.HTTP(s)協議請求特點:
此協議想必大家都非常熟悉,幾乎每天都會頻繁使用,應該對其有較深的使用體會。
當需要了解頁面最新更新內容,需要主動重新整理頁面獲取,而不是伺服器主動向頁面推送。
原因分析如下:
(1).首先客戶端發起請求,伺服器端會給出一個響應,也就是說客戶端是主動方。
(2).伺服器端在HTTP(s)協議下很難有優秀的手段向客戶端實時推送資訊。
(3).並且HTTP(s)協議頭部資料量很大,但需要的資料通常較小,非常浪費頻寬。
二.HTTP(s)協議下的解決方案:
HTTP(s)協議下,實時獲取伺服器資料比較困難,且效能不佳。
下面分別介紹幾個模擬實現伺服器實時推送效果:
(1).輪詢:
所謂的輪詢,就是每隔指定時間,從客戶端向伺服器傳送一次get請求。
如果伺服器有新資料,自然會被髮送到客戶端,如果沒有隻能空手而回。
也就是說,無論伺服器是否有新資料產生,都會按照指定頻率向伺服器傳送請求。
大致可以模擬一下如下場景:
客戶端:請問老闆有貨嗎
伺服器端:沒有貨
客戶端:請問老闆有貨嗎
伺服器端:沒有貨
客戶端:請問老闆有貨嗎
伺服器端:有貨,給你
客戶端:請問老闆有貨嗎
伺服器端:沒有貨
....
如此不斷的重複下去,無窮盡也,看著都感覺累。
很明顯上述方式效能不夠好,因為無論伺服器是否有資料產生,都會向伺服器傳送請求。
這完全是浪費效能,當然有一種比較完美的情況,那就是客戶端明確知道伺服器產生新資料的時間。
(2).長輪詢:
從名稱看,此方法與輪詢帶有很大的相似性,事實也是如此。
通常客戶端會傳送一個get請求,如果伺服器端的確有新的資料,那麼將資料傳送回客戶端。
如果伺服器沒有新的資料,此時伺服器不會立馬給客戶端一個響應,而是保持此請求狀態,在一定時間段內,如果伺服器產生新的資料,那麼就將此新資料傳送回客戶端,如果超過指定時間,那麼此get請求狀態會超時,然後客戶端再傳送一次新的請求,如此往復。
大致可以模擬一下如下場景:
客戶端:請問老闆有貨嗎,沒貨的話我先等一會,但是不能超過10分鐘。
伺服器端:沒有貨,你等等吧
客戶端:等待狀態中...
伺服器端:久等了,終於來貨了,請拿好(在10分鐘之內)。
長輪詢與輪詢相比可以省卻一些不必要的請求,所以效能更佳優良,但是HTTP自身的缺點是無法避免的。
三.WebSocket實現期待效果:
本文不會對WebSocket具體用法做介紹,文章底部會給出對應的文章。
下面介紹一下WebSocket的特點進行一下介紹:
(1).可以實現全雙工通訊,客戶端可以主動發起請求,伺服器也可以主動傳送資料。
(2).採用的ws協議,如果進行加密則是wss協議,可以類比http與https。
(3).頭部資料非常精簡,採用輕量級資料格式,所以與HTTP協議頭部相比,資料傳輸效率很高。
(4).ws協議傳送資料的格式可以是字串,也可以是二進位制資料。
(5).與http協議不同,ws協議不受同源策略的限制。
(6).ws建立在TCP協議之上。
簡單程式碼演示如下:
[JavaScript] 純文字檢視 複製程式碼wss://echo.websocket.org
關於WebSocket更多內容可以參閱如下幾篇文章:
(1).WebSocket握手一章節。
(2).WebSocket API一章節。
(3).WebSocket程式碼演示一章節。
相關文章
- js WebSocket用法簡單介紹JSWeb
- WebSocketWeb
- 【譯】WebSocket協議第三章——WebSocket網址(WebSocket URIs)Web協議
- WebSocket的故事(一)—— WebSocket的由來Web
- 深入淺出Websocket(一)Websocket協議Web協議
- WebSocket APIWebAPI
- WebSocket 握手Web
- go websocketGoWeb
- FastAPI WebSocketASTAPIWeb
- 初探websocketWeb
- WebSocket 教程Web
- Golang 官方認可的 websocket 庫-gorilla/websocketGolangWeb
- WebSocket於HTTP 、WebSocket與Socket的區別WebHTTP
- WebSocket原理與實踐(二)---WebSocket協議Web協議
- 深入淺出Websocket(二)分散式Websocket叢集Web分散式
- Sanic WebSocket 使用Web
- WebSocket 入門Web
- websocket及延展Web
- websocket使用(vue)WebVue
- 簡說websocketWeb
- webSocket筆記Web筆記
- websocket初次使用Web
- WebSocket簡介Web
- go websocket心跳GoWeb
- WebSocket探祕Web
- websocket封裝Web封裝
- Java-WebSocketJavaWeb
- nginx 代理websocketNginxWeb
- WebSocket協議Web協議
- nginx代理websocketNginxWeb
- 淺談WebSocketWeb
- websocket連線Web
- WebSocket通訊Web
- 手摸手教你使用WebSocket[其實WebSocket也不難]Web
- 學習WebSocket(一):Spring WebSocket的簡單使用WebSpring
- 基於WebSocket的modbus通訊(三)- websocket和串列埠Web串列埠
- 簡單聊聊WebSocketWeb
- 前端WebSocket詳解前端Web