HTTP是基于TCP協議的,同一時間里,客戶端和服務器只能有一方主動發(fā)數據,是半雙工通信。
通常,打開某個網頁,我們每點擊一次網頁上的某個選項,前端就會發(fā)送一次HTTP請求,網站返回一次HTTP響應。這種由客戶端主動請求,服務器響應的方式滿足大部分網頁的功能場景。但這種情況下,服務器不會主動給客戶端發(fā)消息。而類似網頁游戲這樣的場景,是需要客戶端和服務器之間互相主動發(fā)大量數據的。
因此,我們需要一個基于TCP的新協議,即新的應用層協議WebSocket。
WebSocket是什么?
WebSocket 是一種用于在單個 TCP 連接上進行全雙工通信的網絡協議。它使用類似于 HTTP 的握手來建立連接,然后使用單獨的持久連接來進行通信。這種方式使得 WebSocket 可以在瀏覽器和服務器之間進行實時通信,而不需要多次發(fā)送 HTTP 請求來獲取數據。這意味著連接是持久的,它一直保持打開,直到有一方主動關閉連接。這使得 WebSocket 非常適合用于實時應用程序,因為它不需要不斷地建立和關閉連接。
WebSocket怎樣建立連接?
WebSocket 連接通常在客戶端(例如瀏覽器)和服務器之間建立??蛻舳税l(fā)送一個 HTTP 請求來建立連接,然后服務器返回一個確認消息,表示已建立連接。之后,客戶端和服務器可以通過這個連接進行雙向通信??蛻舳丝梢韵蚍掌靼l(fā)送消息,服務器也可以向客戶端發(fā)送消息。消息可以是任意的字節(jié)數組,并且可以使用任意的格式進行編碼。
建立websocket連接
WebSocket 是一種必不可少的客戶端—服務器通信工具,需要充分了解其實用性并避免使用場景才能從其最大潛力中獲益。
WebSocket的實際用途
最常見的用途是在實時應用程序開發(fā)中,它有助于在客戶端持續(xù)顯示數據。由于后端服務器不斷發(fā)回此數據,WebSocket 允許在已打開的連接中不間斷地推送或傳輸此數據,使此類數據傳輸更快,并利用了應用程序的性能。
聊天應用程序開發(fā)人員在一次性交換、發(fā)布、廣播消息等操作中調用 WebSocket 。由于使用相同的 WebSocket 連接來發(fā)送或接收消息,因此通信變得簡單、輕量、快捷。
在進行游戲應用程序開發(fā)的同時,服務器必須不間斷地接收數據,而不要求刷新 UI。WebSocket在不影響游戲應用程序 UI 的情況下實現了這一目標。
從上述幾個示例中,我們大概知道了在什么情況下不太適合使用,例如數據交互周期很長,甚至幾小時一次的情況或只需要一次性處理數據時,不應采用 WebSocket協議。在這些情況下,使用 HTTP 協議是一個明智的選擇。
由于 HTTP 和 WebSocket 都用于應用程序通信,因此人們常常感到困惑,很難從這兩者中選擇一個。
WebSocket 與 HTTP 的選擇
WebSocket 是一種框架雙向協議。與此相反,HTTP 是一種單向協議,作用于 TCP 協議之上。由于WebSocket協議能夠支持不間斷的數據傳輸,因此主要用于實時應用程序開發(fā)。HTTP 是無狀態(tài)的,用于開發(fā)RESTful和 SOAP 應用程序。SOAP 仍然可以使用 HTTP 來實現,但是 REST 被廣泛傳播和使用。
在 WebSocket 中,通信發(fā)生在兩端,這使其成為更快的協議。在 HTTP 中,連接是在一端建立的,這使得它比 WebSocket 有點慢。WebSocket 使用統一的 TCP 連接,需要一方終止連接。在它發(fā)生之前,連接保持活動狀態(tài)。HTTP 需要為單獨的請求建立不同的連接。請求完成后,連接會自動斷開。
HTTP 長輪詢
現今對網絡數據安全性也存在更多需求,WebSocket 連接使用的是標準的 TCP 連接,因此它可以在任何支持 TCP 的網絡上使用。它使用的是 ws:// 和 wss:// 協議前綴,這些前綴可以與任何域名或 IP 地址結合使用。
WebSocket 連接是可以加密的,可以使用 TLS(Transport Layer Security,傳輸層安全)協議來保護數據的安全。這種加密連接使用的是 wss:// 協議前綴,與不加密的連接使用的 ws:// 協議前綴相區(qū)別。除此之外,WebSocket 還支持安全握手協議(Secure Handshake Protocol),這使得它可以在瀏覽器和服務器之間進行加密通信。總的來說,WebSocket 具有較高的安全性,可以保護數據的安全。
另外,需要注意的是,WebSocket不是基于HTTP的新協議,因為WebSocket只有在建立連接時才用到了HTTP,升級完成之后就跟HTTP不再有任何關系。
審核編輯:湯梓紅
-
服務器
+關注
關注
12文章
9123瀏覽量
85322 -
HTTP
+關注
關注
0文章
504瀏覽量
31194 -
TCP
+關注
關注
8文章
1353瀏覽量
79055 -
WebSocket
+關注
關注
0文章
29瀏覽量
3745
原文標題:為什么有了HTTP,還需要WebSocket協議?
文章出處:【微信號:cdebyte,微信公眾號:億佰特物聯網應用專家】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論