0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么有了HTTP,還需要WebSocket協(xié)議?

kae1_cdebyte ? 來源:億佰特物聯(lián)網(wǎng)應(yīng)用專家 ? 2023-01-07 10:29 ? 次閱讀

HTTP是基于TCP協(xié)議的,同一時間里,客戶端和服務(wù)器只能有一方主動發(fā)數(shù)據(jù),是半雙工通信。

通常,打開某個網(wǎng)頁,我們每點(diǎn)擊一次網(wǎng)頁上的某個選項,前端就會發(fā)送一次HTTP請求,網(wǎng)站返回一次HTTP響應(yīng)。這種由客戶端主動請求,服務(wù)器響應(yīng)的方式滿足大部分網(wǎng)頁的功能場景。但這種情況下,服務(wù)器不會主動給客戶端發(fā)消息。而類似網(wǎng)頁游戲這樣的場景,是需要客戶端和服務(wù)器之間互相主動發(fā)大量數(shù)據(jù)的。

因此,我們需要一個基于TCP的新協(xié)議,即新的應(yīng)用層協(xié)議WebSocket。

WebSocket是什么?

WebSocket 是一種用于在單個 TCP 連接上進(jìn)行全雙工通信的網(wǎng)絡(luò)協(xié)議。它使用類似于 HTTP 的握手來建立連接,然后使用單獨(dú)的持久連接來進(jìn)行通信。這種方式使得 WebSocket 可以在瀏覽器和服務(wù)器之間進(jìn)行實時通信,而不需要多次發(fā)送 HTTP 請求來獲取數(shù)據(jù)。這意味著連接是持久的,它一直保持打開,直到有一方主動關(guān)閉連接。這使得 WebSocket 非常適合用于實時應(yīng)用程序,因為它不需要不斷地建立和關(guān)閉連接。

WebSocket怎樣建立連接?

WebSocket 連接通常在客戶端(例如瀏覽器)和服務(wù)器之間建立。客戶端發(fā)送一個 HTTP 請求來建立連接,然后服務(wù)器返回一個確認(rèn)消息,表示已建立連接。之后,客戶端和服務(wù)器可以通過這個連接進(jìn)行雙向通信。客戶端可以向服務(wù)器發(fā)送消息,服務(wù)器也可以向客戶端發(fā)送消息。消息可以是任意的字節(jié)數(shù)組,并且可以使用任意的格式進(jìn)行編碼。

建立websocket連接

WebSocket 是一種必不可少的客戶端—服務(wù)器通信工具,需要充分了解其實用性并避免使用場景才能從其最大潛力中獲益。

WebSocket的實際用途

最常見的用途是在實時應(yīng)用程序開發(fā)中,它有助于在客戶端持續(xù)顯示數(shù)據(jù)。由于后端服務(wù)器不斷發(fā)回此數(shù)據(jù),WebSocket 允許在已打開的連接中不間斷地推送或傳輸此數(shù)據(jù),使此類數(shù)據(jù)傳輸更快,并利用了應(yīng)用程序的性能。

聊天應(yīng)用程序開發(fā)人員在一次性交換、發(fā)布、廣播消息等操作中調(diào)用 WebSocket 。由于使用相同的 WebSocket 連接來發(fā)送或接收消息,因此通信變得簡單、輕量、快捷。

在進(jìn)行游戲應(yīng)用程序開發(fā)的同時,服務(wù)器必須不間斷地接收數(shù)據(jù),而不要求刷新 UI。WebSocket在不影響游戲應(yīng)用程序 UI 的情況下實現(xiàn)了這一目標(biāo)。

從上述幾個示例中,我們大概知道了在什么情況下不太適合使用,例如數(shù)據(jù)交互周期很長,甚至幾小時一次的情況或只需要一次性處理數(shù)據(jù)時,不應(yīng)采用 WebSocket協(xié)議。在這些情況下,使用 HTTP 協(xié)議是一個明智的選擇。

由于 HTTP 和 WebSocket 都用于應(yīng)用程序通信,因此人們常常感到困惑,很難從這兩者中選擇一個。

WebSocket 與 HTTP 的選擇

WebSocket 是一種框架雙向協(xié)議。與此相反,HTTP 是一種單向協(xié)議,作用于 TCP 協(xié)議之上。由于WebSocket協(xié)議能夠支持不間斷的數(shù)據(jù)傳輸,因此主要用于實時應(yīng)用程序開發(fā)。HTTP 是無狀態(tài)的,用于開發(fā)RESTful和 SOAP 應(yīng)用程序。SOAP 仍然可以使用 HTTP 來實現(xiàn),但是 REST 被廣泛傳播和使用。

在 WebSocket 中,通信發(fā)生在兩端,這使其成為更快的協(xié)議。在 HTTP 中,連接是在一端建立的,這使得它比 WebSocket 有點(diǎn)慢。WebSocket 使用統(tǒng)一的 TCP 連接,需要一方終止連接。在它發(fā)生之前,連接保持活動狀態(tài)。HTTP 需要為單獨(dú)的請求建立不同的連接。請求完成后,連接會自動斷開。

HTTP 長輪詢

現(xiàn)今對網(wǎng)絡(luò)數(shù)據(jù)安全性也存在更多需求,WebSocket 連接使用的是標(biāo)準(zhǔn)的 TCP 連接,因此它可以在任何支持 TCP 的網(wǎng)絡(luò)上使用。它使用的是 ws:// 和 wss:// 協(xié)議前綴,這些前綴可以與任何域名或 IP 地址結(jié)合使用。

WebSocket 連接是可以加密的,可以使用 TLS(Transport Layer Security,傳輸層安全)協(xié)議來保護(hù)數(shù)據(jù)的安全。這種加密連接使用的是 wss:// 協(xié)議前綴,與不加密的連接使用的 ws:// 協(xié)議前綴相區(qū)別。除此之外,WebSocket 還支持安全握手協(xié)議(Secure Handshake Protocol),這使得它可以在瀏覽器和服務(wù)器之間進(jìn)行加密通信。總的來說,WebSocket 具有較高的安全性,可以保護(hù)數(shù)據(jù)的安全。

另外,需要注意的是,WebSocket不是基于HTTP的新協(xié)議,因為WebSocket只有在建立連接時才用到了HTTP,升級完成之后就跟HTTP不再有任何關(guān)系。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9579

    瀏覽量

    86926
  • HTTP
    +關(guān)注

    關(guān)注

    0

    文章

    516

    瀏覽量

    32242
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1395

    瀏覽量

    80077
  • WebSocket
    +關(guān)注

    關(guān)注

    0

    文章

    30

    瀏覽量

    3965

原文標(biāo)題:為什么有了HTTP,還需要WebSocket協(xié)議?

文章出處:【微信號:cdebyte,微信公眾號:億佰特物聯(lián)網(wǎng)應(yīng)用專家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    為什么HTTP,還需要RPC協(xié)議?

    為什么HTTP,還需要RPC協(xié)議呢?在進(jìn)行說明之前,首先我們需要了解什么是
    的頭像 發(fā)表于 08-14 10:05 ?1139次閱讀
    為什么<b class='flag-5'>有</b><b class='flag-5'>了</b><b class='flag-5'>HTTP</b>,<b class='flag-5'>還需要</b>RPC<b class='flag-5'>協(xié)議</b>?

    一文詳解WebSocket協(xié)議

    在效率和網(wǎng)絡(luò)帶寬利用率方面存在諸多問題。WebSocket協(xié)議應(yīng)運(yùn)而生,對外提供簡單的雙向數(shù)據(jù)傳輸能力。
    的頭像 發(fā)表于 01-07 11:26 ?8125次閱讀
    一文詳解<b class='flag-5'>WebSocket</b><b class='flag-5'>協(xié)議</b>

    NetRouter開發(fā)板之Websocket

    的事,最后發(fā)現(xiàn),居然個叫socket.io。據(jù)說,集成了以上各種協(xié)議。好吧。我落伍完事為了這個。找了一圈。沒有扎到c的例子。參考:websockethtml例子:http://bl
    發(fā)表于 06-20 20:45

    Galileo gen2 wifi還需要配置什么?

    Wireless-AC 7260 進(jìn)行到最后一步時,IDE Serial monitor提示W(wǎng)iFi shield not present 不知道是中間還需要配置什么?還是說那個linux不包含這個網(wǎng)卡的驅(qū)動?新人求助
    發(fā)表于 08-02 00:00

    為什么USB串口還需要TX,RX串口?

    ARDUNIO是干什么的?為什么USB串口還需要TX,RX串口?
    發(fā)表于 09-24 06:13

    基于TCP的一種新的網(wǎng)絡(luò)協(xié)議WebSocket

    開啟 WebSocket 服務(wù)WebSocket 服務(wù)是網(wǎng)頁程序、安卓 App、微信小程序等獲得數(shù)據(jù)和服務(wù)的接口,是基于TCP 的一種新的網(wǎng)絡(luò)協(xié)議,它實現(xiàn)瀏覽器與服務(wù)器全雙工通信。通
    發(fā)表于 12-16 07:38

    根據(jù)WebSocket協(xié)議完全使用C++實現(xiàn)函數(shù)

    由于需要在項目中增加Websocket協(xié)議,與客戶端進(jìn)行通信,不想使用開源的庫,比如WebSocketPP,就自己根據(jù)WebSocket協(xié)議
    的頭像 發(fā)表于 11-28 14:29 ?5108次閱讀

    WebSocket什么優(yōu)點(diǎn)

    WebSocket是一種在單個TCP連接上進(jìn)行全雙工通信的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936補(bǔ)充規(guī)范。
    的頭像 發(fā)表于 02-15 15:53 ?8455次閱讀
    <b class='flag-5'>WebSocket</b><b class='flag-5'>有</b>什么優(yōu)點(diǎn)

    企業(yè)ERP已經(jīng)報表,還需要BI做什么呢?

    在企業(yè)做信息化工作的朋友在談及商業(yè)智能BI時,常常會存在以下困惑:“BI什么用?我用Excel也能做……”,“企業(yè)ERP已經(jīng)報表,還需要BI做什么呢?” 眾所周知,ERP體現(xiàn)
    的頭像 發(fā)表于 04-12 17:16 ?2188次閱讀
    企業(yè)ERP已經(jīng)<b class='flag-5'>有</b>報表<b class='flag-5'>了</b>,<b class='flag-5'>還需要</b>BI做什么呢?

    HTTP為什么還要有websocket協(xié)議?

    如果我們的 HTTP 請求將超時設(shè)置的很大,比如 30 秒,在這 30 秒內(nèi)只要服務(wù)器收到了掃碼請求,就立馬返回給客戶端網(wǎng)頁。如果超時,那就立馬發(fā)起下一次請求。
    的頭像 發(fā)表于 10-20 14:34 ?938次閱讀

    鴻蒙上WebSocket的使用方法

    WebSocket 是一種網(wǎng)絡(luò)通訊協(xié)議,很多網(wǎng)絡(luò)開發(fā)工作者都需要它。本文介紹在 OpenHarmony 上 WebSocket 協(xié)議的使用方
    的頭像 發(fā)表于 03-08 14:17 ?2233次閱讀

    為什么HTTP,還需要WebSocket協(xié)議?

    HTTP是基于TCP協(xié)議的,同一時間里,客戶端和服務(wù)器只能有一方主動發(fā)數(shù)據(jù),是半雙工通信。通常,打開某個網(wǎng)頁,我們每點(diǎn)擊一次網(wǎng)頁上的某個選項,前端就會發(fā)送一次HTTP請求,網(wǎng)站返回一次HTTP
    的頭像 發(fā)表于 01-12 15:54 ?839次閱讀
    為什么<b class='flag-5'>有</b><b class='flag-5'>了</b><b class='flag-5'>HTTP</b>,<b class='flag-5'>還需要</b><b class='flag-5'>WebSocket</b><b class='flag-5'>協(xié)議</b>?

    什么是HTTP協(xié)議?什么是RPC協(xié)議?二者如何選擇使用?

    為什么HTTP還需要RPC協(xié)議呢?在進(jìn)行說明之前,首先我們需要了解什么是
    的頭像 發(fā)表于 08-11 09:25 ?2853次閱讀
    什么是<b class='flag-5'>HTTP</b><b class='flag-5'>協(xié)議</b>?什么是RPC<b class='flag-5'>協(xié)議</b>?二者如何選擇使用?

    websocket協(xié)議的原理

    WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實現(xiàn)瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動發(fā)送信息給客戶端。
    的頭像 發(fā)表于 11-09 15:13 ?1483次閱讀
    <b class='flag-5'>websocket</b><b class='flag-5'>協(xié)議</b>的原理

    MES、ERP,為什么還需要QMS?

    ? MES、ERP,質(zhì)量管理為什么還需要QMS? ?在制造業(yè),質(zhì)量管理始終是企業(yè)管理中永恒的主題。品質(zhì)管理要想做得更好,企業(yè)必須掌握足夠多、足夠有用的數(shù)據(jù)和信息,實現(xiàn)質(zhì)量管理信息化。很多中小企業(yè)
    的頭像 發(fā)表于 08-02 10:09 ?459次閱讀
    <b class='flag-5'>有</b><b class='flag-5'>了</b>MES、ERP,為什么<b class='flag-5'>還需要</b>QMS?

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品