WebSocket 和HTTP的區別及原理
有時候還會有老鐵在考慮在什麼樣的環境下使用WebSocket,什麼樣的環境下使用HTTP,今天我們來說下WebSocket和HTTP。
WebSocket和HTTP的區別
http協議是用在應用層的協議,他是基於tcp協議的,http協議建立鏈接也必須要有三次握手才能發送信息。
http鏈接分為短鏈接,長鏈接,短鏈接是每次請求都要三次握手才能發送自己的信息。即每一個request對應一個response。長鏈接是在一定的期限內保持鏈接。保持TCP連接不斷開。客戶端與伺服器通信,必須要有客戶端發起然後伺服器返回結果。客戶端是主動的,伺服器是被動的。
WebSocket他是為了解決客戶端發起多個http請求到伺服器資源瀏覽器必須要經過長時間的輪訓問題而生的,他實現了多路復用,他是全雙工通信。在webSocket協議下客服端和瀏覽器可以同時發送信息。
建立了WenSocket之後伺服器不必在瀏覽器發送request請求之後才能發送信息到瀏覽器。這時的伺服器已有主動權想什麼時候發就可以發送信息到伺服器。而且信息當中不必在帶有head的部分信息了與http的長鏈接通信來說,這種方式,不僅能降低伺服器的壓力。而且信息當中也減少了部分多餘的信息。
HTTP的長連接與websocket的持久連接
HTTP1.1的連接默認使用長連接(persistent
connection),即在一定的期限內保持鏈接,客戶端會需要在短時間內向服務端請求大量的資源,保持TCP連接不斷開。客戶端與伺服器通信,必須要有客戶端發起然後伺服器返回結果。客戶端是主動的,伺服器是被動的。
在一個TCP連接上可以傳輸多個Request/Response消息對,所以本質上還是Request/Response消息對,仍然會造成資源的浪費、實時性不強等問題。
如果不是持續連接,即短連接,那麼每個資源都要建立一個新的連接,HTTP底層使用的是TCP,那麼每次都要使用三次握手建立TCP連接,即每一個request對應一個response,將造成極大的資源浪費。
長輪詢,即客戶端發送一個超時時間很長的Request,伺服器hold住這個連接,在有新數據到達時返回Response
websocket的持久連接
只需建立一次Request/Response消息對,之後都是TCP連接,避免了需要多次建立Request/Response消息對而產生的冗餘頭部信息。
希望講了這麼多能夠幫助大家更加深入的去了解WebSocket和HTTP之間的區別和聯繫。如果覺得還是沒有理解可以試試用一下第三方WebSocket服務,類似GoEasy這種免費的,大家可以去了解一下。網站好像是www.goeasy.io,碼了這麼多…今天就說到這裡咯。
推薦閱讀:
※鏈接
※HTTP: Connection
※讓 deno 支持 HTTP 服務
※http上傳協議之文件流實現,輕鬆支持大文件上傳
※從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路