news 2026/4/18 2:24:25

Vue 中使用 WebSocket

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue 中使用 WebSocket

在 Vue 中使用 WebSocket 核心是封装通用 WebSocket 工具类(保证复用性、统一管理连接状态),再在组件中调用,同时结合 Vue 生命周期管理连接的创建与销毁,避免内存泄漏和无效连接。以下是适配 Vue2的完整实现方案

方案一 使用Mixin

mixin文件websocket-mixin.js

// src/mixins/aiWebsocketMixin.jsexportdefault{data(){return{ws:null,wsConnected:false,wsReconnectTimer:null,wsReconnectCount:0,wsMaxReconnectAttempts:5,wsReconnectInterval:3000,// 心跳(可选,若后端不支持 ping/pong,可注释掉相关代码)wsHeartbeatTimer:null,wsHeartbeatInterval:30000,// 30秒wsPongTimeoutId:null,wsPongTimeout:10000,}},methods:{/** * 初始化 WebSocket 连接(传入完整 URL) * @param {string} wsUrl - 完整的 WebSocket 地址,含查询参数 */initAiWebSocket(wsUrl){this.closeAiWebSocket()try{this.ws=newWebSocket(wsUrl)this.ws.onopen=()=>{console.log('AI WebSocket connected')this.wsConnected=truethis.wsReconnectCount=0this.$emit('ws-open')// this.startHeartbeat()}this.ws.onmessage=(event)=>{letdatatry{data=JSON.parse(event.data)}catch(e){console.warn('Non-JSON message:',event.data)return}// 如果后端支持 pong,可保留;否则可删除此判断if(data.type==='pong'){this.handlePong()return}// 透传业务消息this.$emit('ws-message',data)}this.ws.onclose=()=>{console.log('AI WebSocket disconnected')this.wsConnected=falsethis.$emit('ws-close')this.stopHeartbeat()this.scheduleReconnect(wsUrl)}this.ws.onerror=(error)=>{console.error('AI WebSocket error',error)this.$emit('ws-error',error)}}catch(err){console.error('Failed to create WebSocket',err)}},sendAiMessage(payload){if(this.ws?.readyState===WebSocket.OPEN){this.ws.send(JSON.stringify(payload))}else{console.warn('WebSocket not open. Message not sent:',payload)}},// —— 心跳(按需启用)——startHeartbeat(){this.stopHeartbeat()// 如果后端不支持 ping/pong,可注释掉 send 部分或整个定时器this.wsHeartbeatTimer=setInterval(()=>{if(this.ws?.readyState===WebSocket.OPEN){// 可选:发送心跳包// this.ws.send(JSON.stringify({ type: 'ping' }))}},this.wsHeartbeatInterval)},handlePong(){if(this.wsPongTimeoutId){clearTimeout(this.wsPongTimeoutId)this.wsPongTimeoutId=null}},stopHeartbeat(){if(this.wsHeartbeatTimer){clearInterval(this.wsHeartbeatTimer)this.wsHeartbeatTimer=null}if(this.wsPongTimeoutId){clearTimeout(this.wsPongTimeoutId)this.wsPongTimeoutId=null}},// —— 重连 ——scheduleReconnect(wsUrl){if(this.wsReconnectCount<this.wsMaxReconnectAttempts){this.wsReconnectCount++console.log(`Reconnecting... (${this.wsReconnectCount}/${this.wsMaxReconnectAttempts})`)this.wsReconnectTimer=setTimeout(()=>{this.initAiWebSocket(wsUrl)},this.wsReconnectInterval)}},// —— 关闭 ——closeAiWebSocket(){this.stopHeartbeat()if(this.wsReconnectTimer){clearTimeout(this.wsReconnectTimer)this.wsReconnectTimer=null}if(this.ws){this.ws.close()this.ws=nullthis.wsConnected=false}}},beforeDestroy(){this.closeAiWebSocket()}}

使用

<template><div><button @click="handleSend">发送</button>{{message}}</div></template><script>importaiWebsocketMixinfrom'@/mixins/aiWebsocketMixin'exportdefault{name:'Websocket',mixins:[aiWebsocketMixin],data(){return{message:''}},mounted(){constwsUrl='ws://127.0.0.1:8000/chat'this.initAiWebSocket(wsUrl)},created(){this.$on('ws-message',this.handleMessage)},methods:{// —————— 发送消息 ——————handleSend(){constparams={message:'你好'}this.sendAiMessage(params)},// —————— 消息处理 ——————handleMessage(message){this.message=message},},beforeDestroy(){this.$off('ws-message',this.handleMessage)}}</script>

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/7 10:20:16

DevOps实战系列 - 集成Arbess+阿里云OSS,下载Aliyun OSS制品进行自动化部署

Arbess 是一款开源免费的 CI/CD 工具&#xff0c;支持免费私有化部署&#xff0c;一键安装零配置。本文将详细介绍如何安装配置使用Arbess系统&#xff0c;使用Arbess流水线下载Aliyun OSS制品进行主机部署。 1、阿里云OSS 阿里云OSS是是阿里云提供的海量、安全、低成本、高可…

作者头像 李华
网站建设 2026/4/5 17:52:20

从跨界参与到场景落地:低空训推平台让大模型由通用走向专用

随着大模型技术向各行业渗透&#xff0c;用户对大模型期待已经从重技术向着技术与场景并重的方向转化&#xff0c;形成了对高效、低成本模型定制路径的需求。面向物流、巡检、文旅等行业向低空经济领域广泛布局的背景&#xff0c;星图云开放平台推出低空训推平台&#xff0c;通…

作者头像 李华
网站建设 2026/4/17 13:30:48

跨域跨境电商新周期:成本上行只是表象,真正的分水岭是“系统能力”

过去做跨境&#xff0c;很多团队靠一套打法就能吃遍多个市场&#xff1a;低价小包直发、平台流量放量、再用价格把转化砸出来。现在这套“通吃模型”越来越难。原因很现实&#xff1a;到岸成本变得不稳定、合规责任变得可追溯、投放个性化在收缩、内容电商在欧洲加速渗透。跨域…

作者头像 李华
网站建设 2026/4/15 15:58:57

大数据领域数据预处理的实时数据挖掘技术

大数据领域数据预处理的实时数据挖掘技术 关键词:大数据、数据预处理、实时数据挖掘、数据清洗、特征工程、流处理、机器学习 摘要:本文深入探讨大数据领域中数据预处理在实时数据挖掘中的关键作用。我们将从基础概念出发,逐步解析实时数据挖掘的技术架构,详细介绍数据预处…

作者头像 李华
网站建设 2026/4/11 2:10:27

AI时代的能力通行证:全面解读CAIE注册人工智能工程师认证

在人工智能技术飞速发展的今天,无论是零基础的学习者、寻求职业转型的职场人,还是深耕技术领域的专业人士,都在寻找一条既能系统学习又能获得行业认可的专业路径。CAIE注册人工智能工程师认证(简称“赛一认证”)作为近年来备受关注的AI领域专业认证,为不同背景和需求的人…

作者头像 李华
网站建设 2026/4/10 22:36:54

假照放、单照接,阿里国际站帮外贸商家实现“春节躺赚”

“老外为什么过年不放假&#xff1f;&#xff01;”“大过年的&#xff0c;来了订单还接不接&#xff1f;&#xff01;” 过去&#xff0c;这一直是一个让外贸商家“左右为难”的问题。但今年春节&#xff0c;单子可以照常接&#xff0c;发货交给阿里国际站。由此&#xff0c;…

作者头像 李华