日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Vue3 無所不能!我用 Vue3 寫接口給前端用你們信嗎?

來源: 責編: 時間:2024-09-10 09:51:07 118觀看
導讀最近接到一個需求,有兩個頁面分別連接了兩個Websocket連接,并且這兩個頁面可以通過Websocket去相互影響圖片為了方便講解,以下會簡化業(yè)務。這兩個頁面簡化后如下:圖片當點擊頁面1更新按鈕后,頁面1會+1,而 頁面2 會變成 頁面

最近接到一個需求,有兩個頁面分別連接了兩個Websocket連接,并且這兩個頁面可以通過Websocket去相互影響f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

為了方便講解,以下會簡化業(yè)務。f3j28資訊網(wǎng)——每日最新資訊28at.com

這兩個頁面簡化后如下:f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

  • 當點擊頁面1更新按鈕后,頁面1會+1,而 頁面2 會變成 頁面1 數(shù)值的10倍。
  • 當點擊頁面2清空按鈕后,頁面1和2的數(shù)值都會變成0。
  • 頁面2需要定時去獲取數(shù)值,并展示出來。

效果如下:f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

最普通的做法?

其實不難,只需要用 Nodejs新建兩個 Websocket連接,然后維護一個 count變量即可。f3j28資訊網(wǎng)——每日最新資訊28at.com

npm i ws

至于怎么跨兩個Websocket進行通信呢?其實也簡單,無非就是定義兩個全局變了,去存儲兩個Websocket實例唄!f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

接著就是前端頁面進行Websocket通信,即可完成。f3j28資訊網(wǎng)——每日最新資訊28at.com

Page1

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

Page2

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

即可完成效果。f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

不太好維護吧?

其實這個需求唯一的難點就在于怎么去跨兩個Websocket進行通信,上面的做法是定義兩個全局變量去存儲f3j28資訊網(wǎng)——每日最新資訊28at.com

但是感覺這樣不太妥,如果以后Websocket連接實例多了,那么維護起來會不會很費勁?f3j28資訊網(wǎng)——每日最新資訊28at.com

我有個想法:能不能讓每一個 Websocket 連接各自管自己的事f3j28資訊網(wǎng)——每日最新資訊28at.com

但是其實想要做到各管各的,是有難處的,難就難在于:他們都依賴于count的變化,一個實例改變了 count之后,怎么通知另一個實例去做操作呢?f3j28資訊網(wǎng)——每日最新資訊28at.com

想到這里我就想到了 Vue3,當數(shù)據(jù)變化時,可以監(jiān)聽數(shù)據(jù)變化,并在監(jiān)聽函數(shù)中去做你想做的事情f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

那么能不能把Vue3的那一套響應式 API 拿到 Nodejs中去用呢?f3j28資訊網(wǎng)——每日最新資訊28at.com

答案是:可以!!!Vue3是真的牛,他把 API 都拆出來放在 @vue/reactivity這個包中了,就算你不在瀏覽器環(huán)境,也能用這個包去做響應式邏輯,這個包擁有了幾乎所有 Vue 的響應式 API。f3j28資訊網(wǎng)——每日最新資訊28at.com

npm i @vue/reactivity

我們只需要用到ref、computed、watch,即可讓每個 Websocket 實例各管各的。f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片f3j28資訊網(wǎng)——每日最新資訊28at.com

其實大家可以把@vue/reactivity當做一個工具庫來看,不要綁定上 Vue,他就是一個響應式工具庫!!!甚至在 React 項目中也可以用。f3j28資訊網(wǎng)——每日最新資訊28at.com

// Nodejs 端 index.js// 引入 WebSocket 庫const WebSocket = require('ws');// 引入 Vue 響應式 APIconst reactivity = require('@vue/reactivity')const {    ref,    computed,    watch} = reactivity// 創(chuàng)建 WebSocket 服務器const wss1 = new WebSocket.Server({    port: 8001});const wss2 = new WebSocket.Server({    port: 8002});// 記錄數(shù)字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))    });    // 監(jiān)聽 count,并通知頁面2    watch(count, v => {        ws.send(v)    })});// 連接2wss2.on('connection', (ws) => {    // 處理來自客戶端的消息    ws.on('message', () => {        // 執(zhí)行清空命令        count.value = 0    });    // 監(jiān)聽 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">點擊更新數(shù)據(jù)</Button>  <div class="text-lg">當前數(shù)值:{{ count }}</div></template><script setup lang="ts">import { Button } from 'ant-design-vue';import { ref } from 'vue';const count = ref(0);// 創(chuàng)建 WebSocket 客戶端const socket = new WebSocket('ws://localhost:8001');const click = () => {  count.value++;  // 發(fā)送消息到服務器  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">清空數(shù)據(jù)</Button>  <div class="text-lg">當前數(shù)值:{{ count }}</div></template><script setup lang="ts">import { Button } from 'ant-design-vue';import { ref } from 'vue';const count = ref(0);// 創(chuàng)建 WebSocket 客戶端const socket = new WebSocket('ws://localhost:8002');const click = () => {  // 發(fā)送消息到服務器  socket.send('Hello, server!');};// 接受服務端的消息socket.addEventListener('message', e => {  count.value = e.data;});</script>


f3j28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-112787-0.htmlVue3 無所不能!我用 Vue3 寫接口給前端用你們信嗎?

聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: SpringBoot整合RabbitMQ實現(xiàn)郵件異步發(fā)送

下一篇: 系統(tǒng)設計 | Java 應用中的配置含義和避坑

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續(xù)為本月發(fā)布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 一加Ace2 Pro真機揭曉 鈦空灰配色質感拉滿

    終于,在經(jīng)過了幾波預熱之后,一加Ace2 Pro的外觀真機圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設計還是延續(xù)了一加11的方案,只是細節(jié)上有了調整,例如新加入了鈦空灰
  • 多線程開發(fā)帶來的問題與解決方法

    使用多線程主要會帶來以下幾個問題:(一)線程安全問題  線程安全問題指的是在某一線程從開始訪問到結束訪問某一數(shù)據(jù)期間,該數(shù)據(jù)被其他的線程所修改,那么對于當前線程而言,該線程
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來源:價值研究所 作者:Hernanderz&ldquo;難道就因為自己的一個產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運營上的問題,選擇逃避了嗎?&rdquo;這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 猿輔導與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對&ldquo;勢&rdquo;的把握,這其中最關鍵的當屬對企業(yè)戰(zhàn)略的制定,且能夠站在未來看現(xiàn)在,即使這其中的
  • 滴滴違法違規(guī)被罰80.26億 共存在16項違法事實

    滴滴違法違規(guī)被罰80.26億 存在16項違法事實開始于2121年7月,歷經(jīng)一年時間,網(wǎng)絡安全審查辦公室對“滴滴出行”網(wǎng)絡安全審查終于有了一個暫時的結束。據(jù)“網(wǎng)信
  • 蘋果140W USB-C充電器:采用氮化鎵技術

    據(jù)10 月 30 日 9to5 Mac 消息報道,當蘋果推出新的 MacBook Pro 2021 時,該公司還推出了新的 140W USB-C 充電器,附贈在 MacBook Pro 16 英寸機型的盒子里,也支
  • 世界人工智能大會國際日開幕式活動在世博展覽館開啟

    30日上午,世界人工智能大會國際日開幕式活動在世博展覽館開啟,聚集國際城市代表、重量級院士專家、國際創(chuàng)新企業(yè)代表,共同打造人工智能交流平臺。上海市副市
  • 電博會與軟博會實現(xiàn)"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發(fā)揮展會拉動人流、信息流、資金流實現(xiàn)快速交互流動的作用,繼而推動區(qū)域經(jīng)濟良性發(fā)展;又可以聚
Top 主站蜘蛛池模板: 靖远县| 乐山市| 额济纳旗| 会宁县| 法库县| 临西县| 永福县| 大冶市| 庆元县| 宜宾市| 秭归县| 清徐县| 洛隆县| 桦南县| 贺州市| 客服| 肥城市| 卢氏县| 冕宁县| 临邑县| 金门县| 凉山| 灵石县| 墨玉县| 赞皇县| 保山市| 贵州省| 遂昌县| 平山县| 旬邑县| 辽宁省| 灵山县| 赣榆县| 香港 | 扶绥县| 昂仁县| 广汉市| 威海市| 大英县| 辉南县| 石棉县|