国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HTML5 WebSocket介紹與基本使用(解析服務端返回的二進制數(shù)據(jù))

這篇具有很好參考價值的文章主要介紹了HTML5 WebSocket介紹與基本使用(解析服務端返回的二進制數(shù)據(jù))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

WebSocket基本介紹

WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議。

WebSocket 使得客戶端和服務器之間的數(shù)據(jù)交換變得更加簡單,允許服務端主動向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。

在 WebSocket API 中,瀏覽器和服務器只需要做一個握手的動作,然后,瀏覽器和服務器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
瀏覽器通過 JavaScript 向服務器發(fā)出建立 WebSocket 連接的請求,連接建立以后,客戶端和服務器端就可以通過 TCP 連接直接交換數(shù)據(jù)。

WebSocket 狀態(tài)

在上面代碼中我們通過WebSocket()構(gòu)造函數(shù)來構(gòu)造一個ws實例。對應的這個實例中有只讀屬性 readyState 表示連接狀態(tài)四個狀態(tài),對應的分別有四個不同的值,具體如下:

狀態(tài) 說明
WebSocket.CONNECTING 0 表示連接尚未建立
WebSocket.OPEN 1 表示連接已建立,可以進行通信
WebSocket.CLOSING 2 表示連接正在進行關閉
WebSocket.CLOSED 3 表示連接已經(jīng)關閉或者連接不能打開

WebSocket 事件

整個ws建立的過程有四個比較重要的事件,分別是:

  1. open階段:WebSocket.onopen屬性定義一個事件處理程序,當WebSocket 的連接狀態(tài)readyState 變?yōu)?時調(diào)用;這意味著當前連接已經(jīng)準備好發(fā)送和接受數(shù)據(jù)。這個事件處理程序通過 事件(建立連接時)觸發(fā)
  2. message:message 事件會在 WebSocket 接收到新消息時被觸發(fā)
  3. close:WebSocket.onclose 屬性返回一個事件監(jiān)聽器,這個事件監(jiān)聽器將在 WebSocket 連接的readyState 變?yōu)?CLOSED時被調(diào)用,它接收一個名字為“close”的 CloseEvent 事件
  4. error:當websocket的連接由于一些錯誤事件的發(fā)生 (例如無法發(fā)送一些數(shù)據(jù)) 而被關閉時,一個error事件將被引發(fā)

WebSocket 方法

ws中我們常用的有如下兩個方法:

  1. send:使用連接發(fā)送數(shù)據(jù)
  2. close:關閉連接

HTML中建立ws

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>websocket-demo</title>
</head>

<body>

</body>
<script>

  // 建立ws連接
  const wbSocket = () => {
    // ws實例
    let webSocket = null;
    // 檢測心跳的間隔ID
    let intervalID = null;
    const connect = async () => {
      // 服務端ws的地址
      const wsUrl = 'ws://10.199.161.17:9010/ws?deviceId=A51a007F-0620-467B-8A4a-c8a6c9aD69FD&protocolVersion=3'
      // https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/readyState
      // CLOSED
      if (webSocket && webSocket.readyState !== 3) {
        return;
      }
      // Create WebSocket connection.
      webSocket = new WebSocket(wsUrl);

      // 連接已經(jīng)準備好發(fā)送和接受數(shù)據(jù)
      webSocket.addEventListener("open", (event) => {
        webSocket.send("Hello Server, connection has build", event);
      });

      // Listen for messages
      webSocket.addEventListener("message", async (event) => {
        console.log("Message from server: ", event.data);
        const receivedData = event.data;
        if (receivedData instanceof Blob) {
          try {
            const buffer = await event.data.arrayBuffer()
            // 建立DateView對象來讀寫緩沖區(qū) 按照有符號的8位數(shù)字讀取
            const view = new Int8Array(buffer);
            // 將類數(shù)組view轉(zhuǎn)化為數(shù)組,方便讀取
            const list = Array.from(view)
            console.log(list);
          } catch (error) {
            console.log('解析blob出錯', error.message);
          }
        } else {
          console.log('接受到的數(shù)據(jù)');
        }
      });

      // Listen for possible errors
      webSocket.addEventListener("error", (event) => {
        console.log("WebSocket error: ", event);
      });

      webSocket.addEventListener("close", event => {
        console.log("socket closed ", event.data);
        // 將webSocket 設為Null, 不再發(fā)送心跳 等待重新建立連接
        clearInterval(intervalID)
        webSocket = null;
        intervalID = null;
      });
    }
    
    setInterval(() => {
      // 如果有socket實例并且有心跳就直接返回
      if (webSocket && webSocket) return
      // 無ws實力 or 心跳id則建立ws連接
      connect()
    }, 5 * 1000)
  }

  wbSocket()

</script>

</html>

可以看到在上面代碼中我們對服務端返回給前端的值做了一層判定,有時服務端在特定的場景下會使用java中的netty這個工具包返回給前端的數(shù)據(jù)是二進制的,就需要前端判斷之后自己再使用arrayBuffer這個API自己轉(zhuǎn)一下。
如果服務端此時返回的是一個正常的數(shù)據(jù)而非Blob的話,那就可以直接在event.data中獲取就可以了。
需要注意一點是ArrayBuffer是一個表示原始二進制數(shù)據(jù)的緩沖區(qū),是一個字節(jié)數(shù)組,并不能直接操作ArrayBuffer中的內(nèi)容。需要通過DataView對象來操作

瀏覽器中查看ws

HTML5 WebSocket介紹與基本使用(解析服務端返回的二進制數(shù)據(jù)),javaScript,html5,websocket,前端
如果打印出上面代碼中的buffer的話console.log(111, buffer);會在瀏覽器如下顯示:
HTML5 WebSocket介紹與基本使用(解析服務端返回的二進制數(shù)據(jù)),javaScript,html5,websocket,前端
我們點擊右側(cè)的那個點之后,會跳轉(zhuǎn)到瀏覽器的內(nèi)存檢查器,查看對應的值以及存這些值的地址。
HTML5 WebSocket介紹與基本使用(解析服務端返回的二進制數(shù)據(jù)),javaScript,html5,websocket,前端

參考資料

WebSocket
HTML5 WebSocket
ArrayBuffer文章來源地址http://www.zghlxwxcb.cn/news/detail-609674.html

到了這里,關于HTML5 WebSocket介紹與基本使用(解析服務端返回的二進制數(shù)據(jù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【溫故而知新】HTML5 WebSocket

    HTML5是HTML的最新版本,它引入了許多新的元素和功能,以適應現(xiàn)代網(wǎng)頁開發(fā)的需求。以下是HTML5的一些主要特點: 新增語義元素 :HTML5引入了許多新的語義元素,如 header、footer、article、section 等,這些元素有助于提高網(wǎng)頁的結(jié)構(gòu)化和可訪問性。 媒體支持 :HTML5引入了 audio 和

    2024年01月18日
    瀏覽(93)
  • WebSocket 的介紹及基本使用

    WebSocket 的介紹及基本使用

    什么是 websocket ??https://websocket.org/ 是一種網(wǎng)絡通信協(xié)議,和 HTTP 協(xié)議 一樣。 為什么需要websocket ? 因為 HTTP 協(xié)議有一個缺陷:通信只能由客戶端發(fā)起。 了解 websocket api含義 基于原生的 websocket 完成服務端和客戶端的通訊 在做客戶端和服務端 通訊業(yè)務時,可以采用使用一種前

    2024年02月11日
    瀏覽(21)
  • 前端-01Html5基本知識

    前端-01Html5基本知識

    內(nèi)容 使用瀏覽器打開 瀏覽器 谷歌瀏覽器 清緩存 ctrl+shift+delete vscode 生成瀏覽器文件.html的快捷方式 !+回車 常用快捷鍵 快速打開瀏覽器 插件open in browser 安裝,就會多出兩個選項來 概念 是一種用來描述網(wǎng)頁的一種語言,被稱為超文本標記語言,本質(zhì)是標記語言,標記語言是

    2024年02月04日
    瀏覽(37)
  • Web端服務器推送技術(shù)原理分析及dwr框架簡單的使用,html5移動web開發(fā)

    Web端服務器推送技術(shù)原理分析及dwr框架簡單的使用,html5移動web開發(fā)

    缺點 ?: a)?糟糕的用戶體驗 b)?對服務器的壓力很大,并且造成帶寬的極大浪費。 2.2?Ajax?輪詢 Ajax隔一段時間(通常使用JavaScript的setTimeout函數(shù))就去服務器查詢是否有改變,從而進行增量式的更新。但是間隔多長時間去查詢成了問題,因為性能和即時性造成了嚴重的反比

    2024年04月16日
    瀏覽(27)
  • 利用HTML5存儲對象:localStorage和sessionStorage解析

    前端朋友們,你是否曾為如何在用戶的瀏覽器中存儲數(shù)據(jù)而感到困擾?你是否想過,如果可以在用戶的瀏覽器中存儲一些數(shù)據(jù),那么我們的應用程序?qū)兊枚嗝磸姶??如果你的答案是肯定的,那么本文將為你解鎖一種新的能力——使用HTML5的localStorage和sessionStorage。 HTML5引入

    2024年02月05日
    瀏覽(17)
  • html的form標簽的基本介紹及使用

    html的form標簽的基本介紹及使用

    目錄 前言 1.什么是form標簽 1.1 基本介紹 1.2 form標簽的相關屬性 1.2.1 action屬性 1.2.2?method屬性 1.2.3 name屬性 2.form標簽的元素 2.1 input元素 2.1.1 text ?2.1.2? password ?2.1.3 submit ?2.1.4 radio 2.1.5 checkbox 2.1.6 button 2.1.7? html5新增的屬性 2.2 input元素的其他屬性 2.2 select元素(下拉列表)與

    2024年02月04日
    瀏覽(23)
  • 零基礎學習HTML5(各標簽語法介紹)

    零基礎學習HTML5(各標簽語法介紹)

    vscode + 谷歌瀏覽器 vscode下載地址:https://code.visualstudio.com/ 谷歌可以使用360軟件管家安裝 在vscode中安裝插件: open in browser ,點擊Extensions后搜索對應插件名然后點擊安裝Install 安裝完成后可在html文件中右鍵多了兩個選擇: 或者安裝 live server 插件,然后右鍵選擇 Open with live

    2024年02月07日
    瀏覽(28)
  • PHPStudy+HTML5數(shù)據(jù)庫連接詳細介紹/數(shù)據(jù)前后端交互

    PHPStudy+HTML5數(shù)據(jù)庫連接詳細介紹/數(shù)據(jù)前后端交互

    ? ? 數(shù)據(jù)庫的連接想必是讓小伙伴們頭疼的一件事,這篇文章小編將為大家詳細介紹使用PHPStudy連接數(shù)據(jù)庫的詳細步驟、調(diào)試運行以及代碼講解。 ? ? 首先我們需要準備的軟件有:phpstudy_pro(小白)、PhpStorm 2021.1.2 x64(其他版本也可以)。要連接的數(shù)據(jù)庫是phpstudy_pro中自帶的

    2024年02月05日
    瀏覽(24)
  • HTML5中使用video標簽

    HTML5中使用video標簽

    隱藏下載: nodownload 隱藏播放速度: noplaybackrate 隱藏畫中畫: disablePictureInPicture=\\\"true\\\" 隱藏三個點: controlslist=\\\"nodownload noplaybackrate\\\" 隱藏音量按鈕:

    2024年02月07日
    瀏覽(93)
  • HTML5——基礎知識及使用

    HTML5——基礎知識及使用

    html 標簽是整個 html 文件的根標簽(最頂層標簽). head 標簽中寫頁面的屬性. body 標簽中寫的是頁面上顯示的內(nèi)容. title 標簽中寫的是頁面的標題. HTML 代碼是由 “標簽” 構(gòu)成的. 例如: body hello /body 標簽名 (body) 放到 中. 大部分標簽成對出現(xiàn). body 為開始標簽, /body 為結(jié)束標簽. 少

    2024年02月16日
    瀏覽(45)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包