成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue 團隊正式發布!未來 Vue 也能寫后端啦!

開發 后端
通過 Vue3 的響應式 API 和WebSocket的結合,我們可以輕松地實現兩個頁面間的實時數據同步,并使代碼更加易于維護和擴展。

背景需求

最近,我遇到了一個需求:有兩個頁面,每個頁面各自連接到一個獨立的WebSocket。這兩個頁面能夠通過WebSocket相互影響。

圖片圖片

為了更好地理解需求,以下是兩個頁面的簡化版本:

圖片圖片

頁面1和頁面2的需求:

  • 頁面1:當點擊更新按鈕時,頁面1的數值加1,同時頁面2的數值變為頁面1數值的10倍。
  • 頁面2:當點擊清空按鈕時,頁面1和頁面2的數值都會清零。
  • 頁面2:定時獲取頁面1的數值,并展示出來。

效果演示:

圖片圖片

簡單實現方案

實現這個需求并不復雜,核心思路是通過Node.js創建兩個WebSocket連接,并通過一個count變量來同步頁面的數據。

首先,安裝ws庫:

npm install ws

如何實現兩個WebSocket之間的通信呢?其實就是維護兩個全局變量來存儲這兩個WebSocket實例。

圖片圖片

然后,在前端頁面通過 WebSocket 通信來實現數據同步。

頁面1

圖片圖片

頁面2

圖片圖片

通過這種方式,基本實現了需求,效果如下:

圖片圖片

優化思路

上述方法雖能實現需求,但維護起來可能會很麻煩,尤其是當多個WebSocket連接實例增加時,代碼可能變得難以管理。

我有一個想法:能否讓每個WebSocket連接管理自己的狀態?

問題在于,盡管每個連接管理自己的狀態,它們仍然需要依賴一個共同的變量(即count)。當某個實例更新了count,另一個實例如何被通知并作出反應呢?

想到這里,我就聯想到了 Vue3 的響應式機制。Vue3 提供了一套非常優秀的響應式 API,當數據變化時,它能夠自動通知相關的組件進行更新。

圖片圖片

能否將 Vue3 的響應式 API 移植到Node.js環境中呢?

答案是:可以!Vue3 將響應式 API 拆分成了一個獨立的庫@vue/reactivity,即使在 Node.js 環境下,也可以使用這個庫來實現響應式功能。

通過安裝這個包:

npm install @vue/reactivity

我們可以使用ref、computed 和 watch來讓每個WebSocket 實例獨立管理自己的狀態。

圖片圖片

最終的效果展示:

圖片圖片

代碼實現(完整方案)

可以將@vue/reactivity作為一個響應式工具庫使用,它不僅可以在Node.js環境下使用,甚至可以在 React 項目中使用。

Node.js 端:index.js

// 引入 WebSocket 庫
const WebSocket = require('ws');
// 引入 Vue3 響應式 API
const reactivity = require('@vue/reactivity');

const { ref, computed, watch } = reactivity;

// 創建 WebSocket 服務器
const wss1 = new WebSocket.Server({ port: 8001 });
const wss2 = new WebSocket.Server({ port: 8002 });

// 記錄數字
const count = ref(0);
// 計算數值的 10 倍
const sum = computed(() =>10 * count.value);

// 處理連接1
wss1.on('connection', (ws) => {
    ws.on('message', (message) => {
        // 更新 count 的值
        count.value = Number(message);
    });
    // 監聽 count 變化,并發送到頁面1
    watch(count, (newValue) => {
        ws.send(newValue);
    });
});

// 處理連接2
wss2.on('connection', (ws) => {
    ws.on('message', () => {
        // 清空 count 和 sum
        count.value = 0;
    });
    // 監聽 sum 變化,并發送到頁面2
    watch(sum, (newValue) => {
        ws.send(newValue);
    });

    // 模擬定時任務,定期發送 sum
    setTimeout(() => {
        ws.send(sum.value);
    }, 3600 * 12);  // 12小時后發送
});

頁面1:Page1.vue

<template>
  <div class="flex justify-center mb-3 text-4xl font-bold">頁面1</div>
  <Button type="primary" @click="click">點擊更新數據</Button>
  <div class="text-lg">當前數值:{{ count }}</div>
</template>

<script setup lang="ts">
import { Button } from'ant-design-vue';
import { ref } from'vue';

const count = ref(0);

// 創建 WebSocket 客戶端
const socket = new WebSocket('ws://localhost:8001');

const click = () => {
  count.value++;
// 發送更新后的 count 到服務器
  socket.send(`${count.value}`);
};

// 接收來自服務端的消息
socket.addEventListener('message', (e) => {
  count.value = e.data;
});
</script>

頁面2:Page2.vue

<template>
  <div class="flex justify-center mb-3 text-4xl font-bold">頁面2</div>
  <Button type="primary" @click="click">清空數據</Button>
  <div class="text-lg">當前數值:{{ count }}</div>
</template>

<script setup lang="ts">
import { Button } from'ant-design-vue';
import { ref } from'vue';

const count = ref(0);

// 創建 WebSocket 客戶端
const socket = new WebSocket('ws://localhost:8002');

const click = () => {
// 向服務器發送清空命令
  socket.send('Hello, server!');
};

// 接收來自服務端的消息
socket.addEventListener('message', (e) => {
  count.value = e.data;
});
</script>

最終效果

圖片圖片

這樣,通過 Vue3 的響應式 API 和WebSocket的結合,我們可以輕松地實現兩個頁面間的實時數據同步,并使代碼更加易于維護和擴展。

責任編輯:武曉燕 來源: 前端之神
相關推薦

2022-07-01 16:36:06

NaturoVue 2.7

2023-05-18 09:00:39

Nuxt類型Nuxt 2

2023-05-12 10:22:23

Vue 3.3TypeScrip

2023-12-06 09:02:12

Vitest前端

2023-05-17 15:10:03

兼容JSXVue

2024-03-11 00:07:00

VueRustGo

2017-08-16 14:05:59

Cocos Creat

2022-08-17 10:07:52

VueVue 3

2021-01-25 05:38:59

JSWebvue-vam-vid

2024-03-06 07:28:23

Vue前端開發Vapor 模式

2011-05-20 15:00:15

MeeGo 1.2MeeGo英特爾

2019-10-26 22:21:17

云測Testin安卓

2021-03-24 08:00:44

項目Vue 3Typescript

2019-10-16 18:00:44

AngularVueReact

2014-10-13 12:54:15

微軟Windows 10

2025-05-06 08:46:33

2011-05-26 15:34:25

2024-05-15 09:15:34

Vue環境3D

2015-07-29 15:41:03

Windows 10升級

2025-02-17 02:00:00

Vue性能Vapor
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品一区二区三区四区高清 | av在线免费观看网站 | 伊人超碰 | 婷婷综合五月天 | 国产视频福利在线观看 | 国产精品一区二区不卡 | 国产一级精品毛片 | 超级黄色一级片 | 日本一区二区三区精品视频 | 久色视频在线 | 欧美精品久久久 | 亚洲国产精品一区在线观看 | 羞羞视频一区二区 | www.三级| 欧美日韩精品免费观看 | 国产成人精品午夜视频免费 | 久久99成人| 波波电影院一区二区三区 | 999久久久| 99re99| 一区观看 | 欧美成人免费在线视频 | 99只有精品 | 亚洲电影一区二区三区 | 久久婷婷国产麻豆91 | 亚洲91 | 久久精品网 | 日本精品一区二区三区在线观看 | 欧美成人精品 | 日韩成人在线播放 | 国产小视频自拍 | 婷婷免费在线 | 伊人在线 | 给我免费的视频在线观看 | 欧美αv | 欧美黑人国产人伦爽爽爽 | 亚洲综合中文字幕在线观看 | 中文在线视频观看 | 中文字幕在线网 | 亚洲视频手机在线 | 毛片站|