Vue3使用Websocket进行跨页面通信

安装

复制代码
npm i ws

安装vue3响应式库

复制代码
npm i @vue/reactivity

服务端创建连接--nodejs

javascript 复制代码
// Nodejs 端 index.js

// 引入 WebSocket 库
const WebSocket = require('ws');
// 引入 Vue 响应式 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(String(message))
    });
    // 监听 count,并通知页面2
    watch(count, v => {
        ws.send(v)
    })
});

// 连接2
wss2.on('connection', (ws) => {
    // 处理来自客户端的消息
    ws.on('message', () => {
        // 执行清空命令
        count.value = 0
    });
    // 监听 sum,并通知页面2
    watch(sum, v => {
        ws.send(v)
    })

    // 模拟定时任务
    setTimeout(() => {
        ws.send(sum.value)
    }, 3600 * 12);
});

第一个页面连接8081--page1.vue

javascript 复制代码
<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++;
  // 发送消息到服务器
  socket.send(`${count.value}`);
};

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

第二个页面连接8082--page2.vue

javascript 复制代码
<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>
相关推荐
国科安芯2 分钟前
AS32A601型MCU芯片如何进行IAP升级?
网络·单片机·嵌入式硬件·安全·risc-v·安全性测试
Evan芙6 分钟前
TCP/IP传输访问数据流如何进出主机原理总结
网络·网络协议·tcp/ip
爱尔兰极光9 分钟前
计算机网络--IP地址和子网划分
网络协议·tcp/ip·计算机网络
寰天柚子15 分钟前
服务器远程运维实战:高效管理租赁/自有服务器的全流程指南
运维·服务器·网络
咩图22 分钟前
使用ngrok完成内网穿透
网络·内网穿透·ngrok
Ha_To31 分钟前
2025.12.19 OSPF
运维·服务器·网络
MicroTech202532 分钟前
隐私计算与区块链融合:微算法科技(NASDAQ MLGO)构建新一代区块链网络的创新实践
网络·科技·区块链
Neolnfra39 分钟前
华为无线网络AC+AP完整配置指南
网络协议·华为·wireshark·信息与通信
神的孩子都在歌唱40 分钟前
eNSP 中使用 NAT 地址池实现内网出网转换
网络
加勒比之杰克40 分钟前
【操作系统原理】进程间通信之管道
网络·管道·ipc