最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

web的概念和使用

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

它不同于傳統(tǒng)的HTTP協(xié)議,HTTP協(xié)議主要用于從客戶端向服務(wù)器請求資源,而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ù),無需等待對方的響應(yīng),這對于實(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請求發(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']
}

對象形式:對 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('請傳數(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請求

<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ā)送請求
    },
  },
    // get請求
     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請求的好處

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

總結(jié)

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

相關(guān)文章

  • vue+echart實(shí)現(xiàn)圓滑折線圖

    vue+echart實(shí)現(xiàn)圓滑折線圖

    這篇文章主要為大家詳細(xì)介紹了vue+echart實(shí)現(xiàn)圓滑折線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Vue?watch中監(jiān)聽值的變化,判斷后修改值方式

    Vue?watch中監(jiān)聽值的變化,判斷后修改值方式

    這篇文章主要介紹了Vue?watch中監(jiān)聽值的變化,判斷后修改值方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue+UpLoad實(shí)現(xiàn)上傳預(yù)覽和刪除圖片的實(shí)踐

    Vue+UpLoad實(shí)現(xiàn)上傳預(yù)覽和刪除圖片的實(shí)踐

    本文主要介紹了Vue+UpLoad實(shí)現(xiàn)上傳預(yù)覽和刪除圖片的實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Vue路由守衛(wèi)之路由獨(dú)享守衛(wèi)

    Vue路由守衛(wèi)之路由獨(dú)享守衛(wèi)

    這篇文章主要介紹了Vue路由守衛(wèi)之路由獨(dú)享守衛(wèi)的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 解決vue項(xiàng)目運(yùn)行提示W(wǎng)arnings while compiling.警告的問題

    解決vue項(xiàng)目運(yùn)行提示W(wǎng)arnings while compiling.警告的問題

    這篇文章主要介紹了解決vue項(xiàng)目運(yùn)行提示W(wǎng)arnings while compiling.警告的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 初探Vue3.0 中的一大亮點(diǎn)Proxy的使用

    初探Vue3.0 中的一大亮點(diǎn)Proxy的使用

    這篇文章主要介紹了初探Vue3.0 中的一大亮點(diǎn)Proxy的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Vue實(shí)現(xiàn)電梯樣式錨點(diǎn)導(dǎo)航效果流程詳解

    Vue實(shí)現(xiàn)電梯樣式錨點(diǎn)導(dǎo)航效果流程詳解

    這篇文章主要介紹了Vue實(shí)現(xiàn)電梯樣式錨點(diǎn)導(dǎo)航效果流程,這種導(dǎo)航效果廣泛應(yīng)用于商城點(diǎn)餐購物情景,文中通過示例代碼介紹的很詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-05-05
  • vue項(xiàng)目中v-model父子組件通信的實(shí)現(xiàn)詳解

    vue項(xiàng)目中v-model父子組件通信的實(shí)現(xiàn)詳解

    vue.js,是一個(gè)構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的 web 界面的庫。Vue.js 的目標(biāo)是通過盡可能簡單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中v-model父子組件通信實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • vue實(shí)現(xiàn)word,pdf文件的導(dǎo)出功能

    vue實(shí)現(xiàn)word,pdf文件的導(dǎo)出功能

    這篇文章給大家介紹了vue實(shí)現(xiàn)word或pdf文檔導(dǎo)出的功能,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • vue3時(shí)間插件之Moment.js使用教程

    vue3時(shí)間插件之Moment.js使用教程

    這篇文章主要給大家介紹了關(guān)于vue3時(shí)間插件之Moment.js使用的相關(guān)資料,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

梁河县| 永城市| 揭西县| 华坪县| 渑池县| 安塞县| 太湖县| 四会市| 镇宁| 秦皇岛市| 洛扎县| 天柱县| 旅游| 容城县| 梨树县| 乌兰浩特市| 谷城县| 谷城县| 司法| 施秉县| 通城县| 喀喇沁旗| 奈曼旗| 青龙| 德格县| 惠州市| 桂东县| 杨浦区| 江永县| 乌兰县| 登封市| 蒙自县| 宁海县| 保康县| 厦门市| 广东省| 尖扎县| 永善县| 巨野县| 平舆县| 平武县|