<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      淺淺的聊一下 WebSocket

      第一次看到 ws://wss:// 時候,感覺好高級啊,還有這種協議。

      Websocket 歷史

      WebSocket是在2008年6月誕生的1。經由IEFT標準化后,2009年chrome 4第一個提供了該標準支持,并默認啟用。于2011年由IEFT標準化為RFC 6455

      現在的瀏覽器均已支持該標準。

      Websocket 出現的背景

      思考一下我們經常遇到的一種需求場景,要求在某個網頁下,網頁的內容可以實時更新。

      這種情況下,最大眾化的方式就是輪詢接口了,即通過定時器,定時請求接口,獲取到最新的信息后,將內容更新到頁面中,如下:

      setInterval(() => {
        queryAPI().then(() => update());
      }, 1000);
      

      但是我們知道,這種定時器的延時并不是很精確,而且加上接口的請求時延,實際時間可能不止代碼中所預先設定的時間長度,所以這種實時更新是偽實時更新。

      除此之外,還有一點可能會經常遇到,即,我們更新信息并總是要更新整個頁面上所有可以看到的信息,我們更關注一些經常變化的信息,比如狀態,狀態的信息可能大小只有幾個字節,但是我們輪詢接口拿到的信息卻是這個頁面的所有信息,大小自然不只幾個字節,但是除狀態以外的信息都可以視作是冗余的。

      狀態

      我們實際只需要一個字段,而且即使后端提供只返回狀態的接口,但實際在一個請求中還要計算ip報文頭的大小,依舊是很占用帶寬的。

      輪詢這種解決方案目前依舊是非常流行,最新的輪詢技術是Comet,這種技術雖然可以實現雙向通信,但仍然需要反復發出請求。而且在Comet中普遍采用的HTTP長連接也會消耗服務器資源2。

      Websocket通信模式

      了解網絡的都知道,數據傳輸分為單工、半雙工、全雙工三種工作模式。

      Websocket是基于TCP的,使用全雙工通信模式的協議,他使得客戶端和服務端之間的數據交換變得更簡單。而且,作為一個工作在全雙工模式下的協議,服務端可以在建立連接后隨時向客戶端推送消息。

      由于協議是基于TCP的,所以websocket也是需要建連和關閉連接的,但要注意的是,一般在websocket的握手通常指的是:客戶端發送一個http請求到服務端,服務端響應后標志這個鏈接建立起來。而不是指tcp的三次握手。

      另外在RFC 6455 1.1節「Background」中介紹:WebSocket通過HTTP端口的80和443進行工作,并支持HTTP代理和中介。

      原文:it is designed to work over HTTP ports 80 and 443 as well as to support HTTP proxies and intermediaries

      為了實現和HTTP的兼容性,WebSocket握手使用HTTP的Upgrade頭將HTTP協議轉換成Websocket協議。

      作為一種協議,websocket自然也是有其用于協議控制的頭部信息的,但是相對于HTTP請求每次都要帶上完整的頭部信息,傳輸數據時,websocket數據包的頭部信息就相對較小,從而降低了控制開銷。

      相對于前文所提到的輪詢接口,websocket可以做到服務端直接向客戶端傳輸數據,省去了客戶端發起請求的步驟,同時沒有間隔時間,只要服務端內容變化,就可以告知客戶端,實時性上有了很大的提高。

      Websocket 使用

      WebSocket使用十分簡單,只需要關注以下API:

      1. WebSocket(url[, protocol]) 構造函數

      使用 new WebSocket(xxx) 創建對象時,會同時建立與服務器的連接

      ws

      1. WebSocket.onopen , WebSocket.onclose

      分別對應連接成功、失敗時的回調,這里可以做一些初始化、銷毀的工作

      1. WebSocket.onmessage

      實際處理數據是用的該函數

      在數據處理完成后,需要移除回調函數,不然可能會影響到其他地方的處理

      const ws = new WebSocket('ws://sdf.com');
      function handleData(evt) {
        // handle server data.
      }
      ws.onmessage = handleData;
      ws.addEventListener('message', handleData);
      
      1. WebSocket.send

      主動向服務端發送消息,可以通過send和onmessage進行數據互動,如:

      ws.send('list');
      ?
      ws.onmessage = evt => {
        const data = evt.data;
        if (data === 'hello') {
          console.log('world');
          return ;
        }
        try {
          const obj = JSON.parse(data);
          switch (obj.type) {
            case 'list':
              // do something.
          }
        } catch (ex) {}
      }
      
      1. WebSocket.close

      關閉連接

      Node服務端的實現,這個就參考相關的庫吧,比較復雜。

      衍生知識

      http協議至今,主要經歷了三個版本。

      • http1.0 短連接,單工通信

        • http/1.0默認的模型是短連接,每個HTTP請求都由他自己獨立完成,下圖左1,可以看到每一個http請求都對應了一個建立連接關閉連接的階段,每一個請求都有TCP握手和揮手的階段。
        • 在這個模型下,想要做到實時更新頁面數據,只能考慮輪詢。
      • http1.1 支持長鏈接,半雙工通信

        • 1.0之后的版本,1.1會讓某個連接保持一定的時間,在這段時間里重復發送一系列請求(下圖左2),就是保活。
      • http2.0 支持多路復用,全雙工通信

      Compares the performance of the three HTTP/1.x connection models: short-lived connections, persistent connections, and HTTP pipelining.

      參考文獻

      [1]  [whatwg] TCPConnection feedback

      [2]  wiki

      [3]  RFC 6455

      [4]  Websocket教程

      [5]  HTTP1.x連接管理

      posted @ 2022-03-15 09:31  Achieve前端實驗室  閱讀(1024)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲综合久久精品国产高清| 亚洲精品日本久久久中文字幕 | 大陆熟妇丰满多毛xxxⅹ | 国产亚洲一本大道中文在线| 亚洲乱熟乱熟女一区二区| 午夜精品国产自在| 91中文字幕一区在线| 亚洲性日韩精品一区二区| 亚洲综合一区国产精品| 日本三级香港三级三级人妇久| 在线观看视频一区二区三区| 粉嫩国产av一区二区三区| 日本真人做爰免费视频120秒| 国产日韩av二区三区| 亚洲欧美高清在线精品一区二区| 亚洲丰满熟女一区二区v| 成人无码午夜在线观看| 国产精品人成视频免| 久久香蕉国产线看观看怡红院妓院| 国产95在线 | 欧美| 激情综合网一区二区三区| 内射一区二区三区四区| 久久不卡精品| 亚洲欧洲一区二区免费| 午夜福利精品一区二区三区| 国产精品久久久久aaaa| 99久热在线精品视频| 国产精品va在线观看h| 久久久亚洲欧洲日产国码农村| 莲花县| 国产无遮挡猛进猛出免费软件| 久久―日本道色综合久久| 亚洲国产性夜夜综合| 综合色一色综合久久网| 日韩国产精品区一区二区| 精品 无码 国产观看| 国产亚洲精品久久久久婷婷图片| 亚洲综合一区国产精品| 欧美黑人粗暴多交高潮水最多| 国产av一区二区亚洲精品| 国产精品天干天干综合网|