当前位置:首页 > 科技  > 软件

Vue3 无所不能!我用 Vue3 写接口给前端用你们信吗?

来源: 责编: 时间:2024-09-10 09:51:07 200观看
导读最近接到一个需求,有两个页面分别连接了两个Websocket连接,并且这两个页面可以通过Websocket去相互影响图片为了方便讲解,以下会简化业务。这两个页面简化后如下:图片当点击页面1更新按钮后,页面1会+1,而 页面2 会变成 页面

最近接到一个需求,有两个页面分别连接了两个Websocket连接,并且这两个页面可以通过Websocket去相互影响HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

为了方便讲解,以下会简化业务。HxF28资讯网——每日最新资讯28at.com

这两个页面简化后如下:HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

  • 当点击页面1更新按钮后,页面1会+1,而 页面2 会变成 页面1 数值的10倍。
  • 当点击页面2清空按钮后,页面1和2的数值都会变成0。
  • 页面2需要定时去获取数值,并展示出来。

效果如下:HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

最普通的做法?

其实不难,只需要用 Nodejs新建两个 Websocket连接,然后维护一个 count变量即可。HxF28资讯网——每日最新资讯28at.com

npm i ws

至于怎么跨两个Websocket进行通信呢?其实也简单,无非就是定义两个全局变了,去存储两个Websocket实例呗!HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

接着就是前端页面进行Websocket通信,即可完成。HxF28资讯网——每日最新资讯28at.com

Page1

图片图片HxF28资讯网——每日最新资讯28at.com

Page2

图片图片HxF28资讯网——每日最新资讯28at.com

即可完成效果。HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

不太好维护吧?

其实这个需求唯一的难点就在于怎么去跨两个Websocket进行通信,上面的做法是定义两个全局变量去存储HxF28资讯网——每日最新资讯28at.com

但是感觉这样不太妥,如果以后Websocket连接实例多了,那么维护起来会不会很费劲?HxF28资讯网——每日最新资讯28at.com

我有个想法:能不能让每一个 Websocket 连接各自管自己的事HxF28资讯网——每日最新资讯28at.com

但是其实想要做到各管各的,是有难处的,难就难在于:他们都依赖于count的变化,一个实例改变了 count之后,怎么通知另一个实例去做操作呢?HxF28资讯网——每日最新资讯28at.com

想到这里我就想到了 Vue3,当数据变化时,可以监听数据变化,并在监听函数中去做你想做的事情HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

那么能不能把Vue3的那一套响应式 API 拿到 Nodejs中去用呢?HxF28资讯网——每日最新资讯28at.com

答案是:可以!!!Vue3是真的牛,他把 API 都拆出来放在 @vue/reactivity这个包中了,就算你不在浏览器环境,也能用这个包去做响应式逻辑,这个包拥有了几乎所有 Vue 的响应式 API。HxF28资讯网——每日最新资讯28at.com

npm i @vue/reactivity

我们只需要用到ref、computed、watch,即可让每个 Websocket 实例各管各的。HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

图片图片HxF28资讯网——每日最新资讯28at.com

其实大家可以把@vue/reactivity当做一个工具库来看,不要绑定上 Vue,他就是一个响应式工具库!!!甚至在 React 项目中也可以用。HxF28资讯网——每日最新资讯28at.com

// Nodejs 端 index.js// 引入 WebSocket 库const WebSocket = require('ws');// 引入 Vue 响应式 APIconst 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)// 连接1wss1.on('connection', (ws) => {    // 处理来自客户端的消息    ws.on('message', (message) => {        // count 变化        count.value = Number(String(message))    });    // 监听 count,并通知页面2    watch(count, v => {        ws.send(v)    })});// 连接2wss2.on('connection', (ws) => {    // 处理来自客户端的消息    ws.on('message', () => {        // 执行清空命令        count.value = 0    });    // 监听 sum,并通知页面2    watch(sum, v => {        ws.send(v)    })    // 模拟定时任务    setTimeout(() => {        ws.send(sum.value)    }, 3600 * 12);});<!-- 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++;  // 发送消息到服务器  socket.send(`${count.value}`);};// 接受服务端的消息socket.addEventListener('message', e => {  count.value = e.data;});</script><!-- 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>


HxF28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112787-0.htmlVue3 无所不能!我用 Vue3 写接口给前端用你们信吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: SpringBoot整合RabbitMQ实现邮件异步发送

下一篇: 系统设计 | Java 应用中的配置含义和避坑

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 到手价3099元起!iQOO Neo8 Pro今日首销:安卓性能最强旗舰

    5月23日,iQOO如期举行了新品发布会,全新的iQOO Neo8系列也正式与大家见面,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
Top