欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用websocket和Vue2中的props實(shí)時(shí)更新數(shù)據(jù)方式

 更新時(shí)間:2024年08月09日 09:59:51   作者:守得云開見繁星  
這篇文章主要介紹了使用websocket和Vue2中的props實(shí)時(shí)更新數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

web的概念和使用

WebSocket 是一種在客戶端和服務(wù)器之間提供長壽命、雙向通信的協(xié)議。

它不同于傳統(tǒng)的HTTP協(xié)議,HTTP協(xié)議主要用于從客戶端向服務(wù)器請(qǐng)求資源,而WebSocket則為應(yīng)用程序提供了全雙工(full-duplex)的通信渠道,允許服務(wù)器和客戶端在建立連接后隨時(shí)主動(dòng)向?qū)Ψ桨l(fā)送數(shù)據(jù)。

WebSocket的特點(diǎn)

  • 持久連接:一旦WebSocket連接建立,客戶端和服務(wù)器就可以在不關(guān)閉連接的情況下進(jìn)行多次數(shù)據(jù)交換,這減少了建立和關(guān)閉連接的開銷。
  • 全雙工通信:雙方都可以同時(shí)發(fā)送和接收數(shù)據(jù),無需等待對(duì)方的響應(yīng),這對(duì)于實(shí)時(shí)應(yīng)用(如在線聊天、游戲、協(xié)同編輯、實(shí)時(shí)交易系統(tǒng)等)非常有利。
  • 低延遲:相比輪詢和長輪詢技術(shù),WebSocket減少了不必要的網(wǎng)絡(luò)傳輸和延遲,提供了近乎實(shí)時(shí)的數(shù)據(jù)傳輸能力。
  • 輕量級(jí):雖然基于TCP,但WebSocket在HTTP握手之后使用了自己的更簡單的幀協(xié)議,優(yōu)化了數(shù)據(jù)傳輸效率。

WebSocket的工作流程

  • 握手:客戶端首先通過HTTP請(qǐng)求發(fā)起連接,并包含Upgrade頭信息,表示希望協(xié)議升級(jí)為WebSocket。服務(wù)器確認(rèn)并同意升級(jí)后,連接轉(zhuǎn)為WebSocket協(xié)議。
  • 數(shù)據(jù)傳輸:建立連接后,客戶端和服務(wù)器可以開始互相發(fā)送數(shù)據(jù)片段(稱為“消息”或“幀”)。這些數(shù)據(jù)可以是文本也可以是二進(jìn)制格式,并且可以實(shí)時(shí)傳輸。
  • 關(guān)閉連接:當(dāng)一方完成數(shù)據(jù)傳輸或需要終止連接時(shí),會(huì)發(fā)送關(guān)閉控制幀。收到關(guān)閉指令后,雙方會(huì)清理資源,關(guān)閉連接。

props的概念和使用

在 Vue 2 中,props 是一種特性,用于父組件向子組件傳遞數(shù)據(jù)。

數(shù)據(jù)是單向綁定的,數(shù)據(jù)只能從父組件流向子組件。

使用 props 可以讓組件更加模塊化和可復(fù)用。

props的使用

數(shù)組形式:要簡單地聲明需要接收的屬性,而不進(jìn)行類型檢查或設(shè)置默認(rèn)值。

export default {
  props: ['message']
}

對(duì)象形式:對(duì) props 進(jìn)行更詳細(xì)的配置,指定類型、默認(rèn)值或自定義驗(yàn)證規(guī)則。

export default {
  props: {
    message: {
      type: String, // 指定 prop 類型
      required: true, // 標(biāo)記 prop 為必填
      default: 'default message', // 設(shè)置默認(rèn)值
      validator(value) { // 自定義驗(yàn)證函數(shù)
        return value.length <= 10;
      }
    }
  }
}

websocket和Vue2中的props實(shí)時(shí)更新數(shù)據(jù)

父組件中配置websocket

num作為數(shù)據(jù)更新的信號(hào),用props將num數(shù)據(jù)傳給子組件

<template>
    <div>
      <Test :num ="num"></Test>
    <Form class="form"  :num ="num"></Form>
    </div>
</template>
<script>
export default {
// ------
  mounted(){
        // websocket 更新
    this.setupWebSocket();
  },
  methods: {
    setupWebSocket() {
      this.ws = new WebSocket(`ws://localhost:8081/example/ws/${999}`);
      console.log(this.ws);
      this.ws.addEventListener('open', this.openHandle);
      this.ws.addEventListener('message', this.messageHandle);
      this.ws.addEventListener('close', this.closeHandle);
      this.ws.addEventListener('error', this.errorHandle);
    },
    openHandle() {
      console.log('WebSocket連接成功?。。?!');
    },
    closeHandle() {
      console.log('WebSocket關(guān)閉?。。?!');
      if (!this.isHandle) {
        this.restart();
      }
      this.isHandle = false;
    },
    // 收到消息更新數(shù)據(jù)
    messageHandle(data) {
      console.log('前端接收到消息?。。。?,data);
      // 使組件重新加載
      // this.$forceUpdate()
      this.num =this.num + 1  // 數(shù)據(jù)更新的信號(hào)
    },
    errorHandle() {
      console.log('WebSocket出錯(cuò)了?。。?!');
      console.log('error');
    },
    sendMessage() {
      console.log('我發(fā)送了消息');
      // this.ws.send('請(qǐng)傳數(shù)據(jù)給我!'+input);
    },
    closeWs() {
      this.ws.close();
    },
    restart() {
      console.log('客戶端與服務(wù)器連接失敗,準(zhǔn)備重連');
      this.timer = setInterval(() => {
        console.log('重連中...');
        this.ws = new WebSocket(`ws://localhost:8081/example/ws/${999}`);
        if (this.ws.readyState === 1) {
          clearInterval(this.timer);
          this.timer = null;
          this.ws.addEventListener('open', this.openHandle);
          this.ws.addEventListener('close', this.closeHandle);
          this.ws.addEventListener('message', this.messageHandle);
          this.ws.addEventListener('error', this.errorHandle);
          console.log('重連成功');
        }
      }, 1000);
    },
  }
// ------
}
</script>

子組件接收num數(shù)據(jù),并用watch監(jiān)聽num數(shù)據(jù),當(dāng)數(shù)據(jù)發(fā)生改變的時(shí)候,重新發(fā)送get請(qǐng)求

<script>
export default {
// ------
     props:{
    //更新信號(hào)
    num:{
      type: Number,
      default:0,
    },
  },
    // 監(jiān)聽num
     watch:{
    num(newVal,oldVal) {
      console.log('newValpf :',newVal,'oldValpf :',oldVal)
      this.getInfo();  // 重新發(fā)送請(qǐng)求
    },
  },
    // get請(qǐng)求
     methods: {
    getInfo() {
       axios({
          url:'/api/outstanding-kid/kid/getAllUsers',
          method:'get'
        }).then((data)=>{
          // console.log(data.data.data);
          const electric = data.data.data.map(item => item.electric)
          const id = data.data.data.map(item => item.id)
          this.ChartView(electric,id)
        }).catch((error)=>{
          console.dir(error);
        })
    },
//------
}
</script>

通過websocket更新http請(qǐng)求的好處

  • 低延遲和實(shí)時(shí)性:WebSocket建立了一條持久的雙向通信通道,數(shù)據(jù)可以在服務(wù)器和客戶端之間即時(shí)傳輸,幾乎消除了傳統(tǒng)HTTP請(qǐng)求中的延遲。
  • 減少網(wǎng)絡(luò)帶寬和服務(wù)器資源消耗:由于WebSocket僅需建立一次連接,而后復(fù)用該連接傳輸多次數(shù)據(jù),相比HTTP輪詢減少了建立和斷開連接的次數(shù),從而節(jié)省了網(wǎng)絡(luò)資源和服務(wù)器負(fù)載。HTTP輪詢即使沒有新數(shù)據(jù),也會(huì)定期發(fā)送請(qǐng)求,浪費(fèi)了帶寬和計(jì)算資源。
  • 提高效率和用戶體驗(yàn):WebSocket減少了不必要的HTTP頭部信息傳輸,減輕了數(shù)據(jù)傳輸?shù)呢?fù)擔(dān)。對(duì)于頻繁交互的應(yīng)用,這能夠顯著提升響應(yīng)速度和用戶體驗(yàn)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用vue-cli打包過程中的步驟以及問題的解決

    使用vue-cli打包過程中的步驟以及問題的解決

    這篇文章主要介紹了使用vue-cli打包過程中的步驟以及問題的解決,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額)

    詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額)

    這篇文章主要介紹了詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue實(shí)現(xiàn)移動(dòng)端table表格簡單方法

    vue實(shí)現(xiàn)移動(dòng)端table表格簡單方法

    這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)移動(dòng)端table表格簡單方法的相關(guān)資料,使用Vue.js開發(fā)移動(dòng)應(yīng)用程序時(shí),經(jīng)常需要使用各種UI組件,其中el-table是一個(gè)常用的表格組件,可以方便地展示數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • ElementUI中el-dropdown-item點(diǎn)擊事件無效問題

    ElementUI中el-dropdown-item點(diǎn)擊事件無效問題

    這篇文章主要介紹了ElementUI中el-dropdown-item點(diǎn)擊事件無效問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue全局混入之狀態(tài)判斷是否執(zhí)行點(diǎn)擊

    vue全局混入之狀態(tài)判斷是否執(zhí)行點(diǎn)擊

    這篇文章主要介紹了vue全局混入之狀態(tài)判斷是否執(zhí)行點(diǎn)擊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue實(shí)現(xiàn)點(diǎn)擊展開點(diǎn)擊收起效果

    vue實(shí)現(xiàn)點(diǎn)擊展開點(diǎn)擊收起效果

    這篇文章主要介紹了vue實(shí)現(xiàn)點(diǎn)擊展開,點(diǎn)擊收起效果,首先我們需要定義data里面的數(shù)據(jù),使用computed對(duì)data進(jìn)行處理,需要的朋友可以參考下
    2018-04-04
  • vue-admin-template模板添加tagsview的實(shí)現(xiàn)

    vue-admin-template模板添加tagsview的實(shí)現(xiàn)

    本文主要介紹了vue-admin-template模板添加tagsview的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • vue使用input封裝上傳文件圖片全局組件的示例代碼

    vue使用input封裝上傳文件圖片全局組件的示例代碼

    實(shí)際開發(fā)過程中,我們經(jīng)常遇見需要上傳文件圖片功能,可以封裝一個(gè)全局組件來調(diào)用,這篇文章給大家介紹vue使用input封裝上傳文件圖片全局組件,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Vue使用formData格式類型上傳文件的示例

    Vue使用formData格式類型上傳文件的示例

    這篇文章主要介紹了Vue使用formData格式類型上傳文件的示例代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 淺析Vue.js 中的條件渲染指令

    淺析Vue.js 中的條件渲染指令

    這篇文章主要介紹了Vue.js 中的條件渲染指令,Vue.js 中的條件渲染指令可以根據(jù)表達(dá)式的值,來決定在 DOM 中是渲染還是銷毀元素或組件。本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11

最新評(píng)論