Vue 3使用 Socket

在 Vue 3 中使用 Socket(如 WebSocket 或基于 WebSocket 的庫比如 Socket.IO)可以通過組合式 API(Composition API)來實現得更清晰、模塊化。下面我給你展示一個完整的例子,包括使用原生 WebSocket 和使用 Socket.IO 的方式(你可以根據實際情況選擇)。


? 使用原生 WebSocket 的方式

1. 建立 socket 封裝(推薦封裝成 composable)

// composables/useWebSocket.ts
import { ref, onUnmounted } from 'vue'export function useWebSocket(url: string) {const socket = ref<WebSocket | null>(null)const messages = ref<string[]>([])const connect = () => {socket.value = new WebSocket(url)socket.value.onopen = () => {console.log('WebSocket connected')}socket.value.onmessage = (event) => {messages.value.push(event.data)}socket.value.onclose = () => {console.log('WebSocket closed')}socket.value.onerror = (error) => {console.error('WebSocket error', error)}}const sendMessage = (message: string) => {if (socket.value?.readyState === WebSocket.OPEN) {socket.value.send(message)}}onUnmounted(() => {socket.value?.close()})return {messages,connect,sendMessage,}
}

2. 組件中使用

<template><div><button @click="connect">連接</button><input v-model="message" @keyup.enter="send" placeholder="輸入消息" /><ul><li v-for="(msg, index) in messages" :key="index">{{ msg }}</li></ul></div>
</template><script setup lang="ts">
import { ref } from 'vue'
import { useWebSocket } from './composables/useWebSocket'const { messages, connect, sendMessage } = useWebSocket('ws://localhost:8080')
const message = ref('')const send = () => {sendMessage(message.value)message.value = ''
}
</script>

? 使用 Socket.IO 的方式

1. 安裝依賴

npm install socket.io-client

2. 建立 socket composable

// composables/useSocketIO.ts
import { io, Socket } from 'socket.io-client'
import { ref, onUnmounted } from 'vue'export function useSocketIO(url: string) {const socket: Socket = io(url)const messages = ref<string[]>([])socket.on('connect', () => {console.log('Socket.IO connected')})socket.on('message', (msg: string) => {messages.value.push(msg)})const sendMessage = (msg: string) => {socket.emit('message', msg)}onUnmounted(() => {socket.disconnect()})return {messages,sendMessage,}
}

3. 在組件中使用

<script setup lang="ts">
import { ref } from 'vue'
import { useSocketIO } from './composables/useSocketIO'const { messages, sendMessage } = useSocketIO('http://localhost:3000')
const message = ref('')const send = () => {if (message.value) {sendMessage(message.value)message.value = ''}
}
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73415.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73415.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73415.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

云計算:探索現代科技的未來之云

文章目錄 云計算基本概念云計算是什么注意 云計算的價值云計算的部署模式云計算的服務模式主流的云計算技術AWS簡介AWS建立了廣闊的合作伙伴生態 VMware簡介VMware服務介紹 華為云簡介華為云Stack模式 云計算基本概念 云計算是什么 云計算是一種模型&#xff0c;它可以實現隨時…

光學像差的類型與消除方法

### **光學像差的類型、理解與消除方法** 光學像差是指實際光學系統成像時&#xff0c;由于透鏡或反射鏡的非理想特性導致的光線偏離理想路徑&#xff0c;從而影響成像質量的現象。像差可分為**單色像差**&#xff08;與波長無關&#xff09;和**色差**&#xff08;與波長相關…

什么是ecovadis驗廠?ecovadis驗廠的好處?ecovadis驗廠的重要意義

1. 什么是EcoVadis驗廠&#xff1f; EcoVadis驗廠&#xff08;又稱EcoVadis評估&#xff09;是國際權威的 企業社會責任&#xff08;CSR&#xff09;和可持續發展&#xff08;ESG&#xff09;在線評估&#xff0c;通過審核企業在 環境、勞工與人權、商業道德、可持續采購 四大…

STM32蜂鳴器播放音樂

STM32蜂鳴器播放音樂 STM32蜂鳴器播放音樂 Do, Re, Mi, Fa, 1. 功能概述 本系統基于STM32F7系列微控制器&#xff0c;實現了以下功能&#xff1a; 通過7個按鍵控制蜂鳴器發聲&#xff0c;按鍵對應不同的音符。每個按鍵對應一個音符&#xff08;Do, Re, Mi, Fa, Sol, La, Si&a…

基于 OCO - 2 氧氣 A 帶輻射數據與地面臺站氣壓觀測數據構建近地面氣壓監測算法方案

基于 OCO - 2 氧氣 A 帶輻射數據與地面臺站氣壓觀測數據構建近地面氣壓監測算法方案 一、數據獲取與準備 (一)OCO - 2 氧氣 A 帶輻射數據 數據下載:從 OCO - 2 官方數據發布平臺(如 NASA 的相關數據存儲庫),按照研究所需的時間范圍(例如,近 5 年的數據以獲取足夠的樣本…

程序員英語口語練習筆記

我是一個程序員&#xff0c;專注于Java, Linux和k8s. I’m a programmer specializing in Java, Linux, and Kubernetes. 這個不是我的bug。 I don’t think this bug is caused by my work. 你能幫我看一下這個代碼嗎&#xff1f; Can you take a look at this code for me?…

網絡地址轉換技術(2)

NAT的配置方法&#xff1a; &#xff08;一&#xff09;靜態NAT的配置方法 進入接口視圖配置NAT轉換規則 Nat static global 公網地址 inside 私網地址 內網終端PC2&#xff08;192.168.20.2/24&#xff09;與公網路由器AR1的G0/0/1&#xff08;11.22.33.1/24&#xff09;做…

從零開始理解基于深度學習的語義分割模型:RCA與RCM模塊的實現

從零開始理解基于深度學習的語義分割模型:RCA與RCM模塊的實現 隨著深度學習技術的發展,圖像分割任務取得了長足的進步。本文將從一個具體的PyTorch代碼實例出發,帶大家了解一種 novel 的語義分割網絡架構——RCA(Rectangular Self-Calibration Attention)和 RCM(Rectang…

【Linux網絡-多路轉接select】

代碼&#xff1a;https://gitee.com/nanyi-c/linux/tree/master/day50 一、I/O多路轉接之select 1.初始select 系統提供select函數來實現多路復用輸入/輸出模型 select系統調用是用來讓我們的程序監視多個文件描述符的狀態變化的程序會停在select這里等待&#xff0c;直到被…

2025 年中國家電零售與創新趨勢解析:以舊換新國補激活需求,AI 技術滲透至研發、供應鏈、營銷

一、產業環境&#xff1a;政策驅動與技術變革下的挑戰與機遇 在全球經濟波動與國內消費轉型的雙重背景下&#xff0c;中國家電產業正經歷前所未有的變革。2024 年&#xff0c;家電行業面臨的 “三座大山”—— 短期消費信心低迷、中期房地產降溫、長期人口下行壓力 —— 持續施…

SpringBoot分布式項目中MyBatis實戰技巧:從配置到性能優化

引言 在分布式系統架構中&#xff0c;SpringBoot與MyBatis的組合已成為企業級開發的黃金搭檔。但在實際項目中&#xff0c;開發者常面臨多數據源管理、SQL性能優化、分布式事務等挑戰。本文將從實戰角度出發&#xff0c;分享7個關鍵技巧和避坑指南。 一、多數據源動態切換實戰…

【大模型基礎_毛玉仁】4.1 參數高效微調簡介

目錄 4 參數高效微調4.1 參數高效微調簡介4.1.1 下游任務適配1&#xff09;上下文學習&#xff08;In-context learning&#xff09;2&#xff09;指令微調&#xff08;Instruction Tuning&#xff09; 4.1.2 參數高效微調4.1.3 參數高效微調的優勢 4 參數高效微調 大語言模型…

Postman使用02、斷點、fiddler弱網測試

腳本操作 一、腳本導出 1.導出json腳本 2.打包json文件 3.下載的文件 二 .導入腳本 1.選擇文件 2.點擊導入 3.導入的接口 三.多接口運行 1.集合右鍵&#xff0c;點擊run &#xff0c;運行多個接口 2.編輯環境&#xff0c;集合&#xff0c;執行次數等 3.運行多個接口 四.運行…

深挖增長內核:好產品驅動增長的全方位解析

年前在老板的帶領下深入學習了《增長黑客》&#xff0c;并思考了在CPS站外引流的落地方案&#xff0c;最近剛好在做京東聯盟的京粉推客增長體系建設&#xff0c;再次回顧一下增長黑客方法以及記錄一下思考。 好產品才是增長的根本。增長黑客理念風靡&#xff0c;“啊哈時刻” 概…

新手小白 react-useEffect 使用場景

useEffect 是 React 中的一個非常重要的 Hook&#xff0c;用于處理組件的副作用&#xff08;side effects&#xff09;。它通常在以下幾種場景中使用&#xff1a; 1. 數據獲取 當組件加載時&#xff0c;需要從外部 API 獲取數據&#xff0c;或者從本地存儲中讀取數據。示例&a…

MySQL 調優:查詢慢除了索引還能因為什么?

文章目錄 情況一&#xff1a;連接數過小情況二&#xff1a;Buffer Pool 太小 MySQL 查詢慢除了索引還能因為什么&#xff1f;MySQL 查詢慢&#xff0c;我們一般也會想到是因為索引&#xff0c;但除了索引還有哪些原因會導致數據庫查詢變慢呢&#xff1f; 以下以 MySQL 中一條 S…

【操作系統】進程三種狀態?進程間狀態的切換?掛起態?

進程狀態 進程的五種&#xff08;三種&#xff09;狀態&#xff1a; 新建&#xff08;New&#xff09;&#xff1a;進程剛被創建&#xff0c;尚未加入到就緒隊列&#xff1b;就緒&#xff08;Ready&#xff09;&#xff1a;進程已獲得除CPU外的所有資源&#xff0c;等待被調度執…

計算機控制系統的最小拍控制器設計及仿真分析

1題目 開環傳遞函數 G(s) 2/(s(0.5s1)) &#xff0c;采樣周期 T0.5 秒&#xff0c;設計單位速度輸入下的最小拍控制器 1.1 方法1 根據課本中的步驟&#xff0c;最小拍控制器的設計步驟如下&#xff1a; 1. 確定對象的離散傳遞函數G(z)&#xff0c;并確定其零極點。 2. 確定…

哈希--哈希桶

哈希桶是哈希表&#xff08;散列表&#xff09;中的一個概念&#xff0c;是哈希表數組中的每個元素 &#xff0c;用于存儲鍵值對數據。它有以下特點和相關要點&#xff1a; 結構與原理&#xff1a;哈希表底層常由數組構成&#xff0c;數組的每個元素即哈希桶。通過哈希函數計算…

Linux多線程詳解

Linux多線程詳解 一、Linux多線程概念1.1 什么是線程1.2 進程和線程1.3 進程的多個線程共享1.4 進程和線程的關系 二、Linux線程控制2.1 POSIX線程庫2.2 線程創建2.3 獲取線程ID pthread_self2.4 線程等待pthread_join2.5 線程終止2.6 線程棧 && pthread_t2.7 線程的局…