news 2026/4/9 18:02:12

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/9 10:33:24

【MM25-华南理工】Omni-IML:迈向统一的图像篡改定位

文章&#xff1a;Omni-IML: Towards Unified Image Manipulation Localization代码&#xff1a;暂无单位&#xff1a;华南理工大学、合合信息股份有限公司、香港中文大学一、问题背景当前主流的Image Manipulation Localization(IML)方法大多依赖特定任务设计&#xff0c;仅能在…

作者头像 李华
网站建设 2026/4/8 10:38:13

ModelEngine思想落地指南:用“智能体 + 插件”构建可复用AI应用.76

一、引言 在AI应用开发过程中&#xff0c;我们常面临“重复造轮子”、“流程碎片化”、“技术门槛高”三大绊脚难题&#xff0c;不同场景需重新编写数据处理、工具调用逻辑&#xff0c;非专业人员难以参与&#xff0c;复杂流程维护成本高。而基于ModelEngine 的核心思想&#x…

作者头像 李华
网站建设 2026/4/8 7:11:04

钛和检测冲刺港股:9个月营收5.9亿 净利同比降16%

雷递网 雷建平 2月4日钛和检测认证集团股份有限公司&#xff08;简称&#xff1a;“钛和检测”&#xff09;日前递交招股书&#xff0c;准备在港交所上市。9个月营收5.9亿 净利同比降15.5%钛和检测成立于2017年&#xff0c;是一家检测、检验及认证解决方案服务提供商&#xff0…

作者头像 李华
网站建设 2026/3/26 17:19:16

2025数学研究新范式:AI应用架构师的驱动方法论与趋势

2025数学研究新范式&#xff1a;AI应用架构师的驱动方法论与趋势 引言 背景介绍 在当今科技飞速发展的时代&#xff0c;数学研究领域正经历着一场深刻的变革。长期以来&#xff0c;数学研究主要依赖于数学家的个人智慧、经验以及传统的纸笔计算和逻辑推理。然而&#xff0c;随着…

作者头像 李华
网站建设 2026/4/1 21:05:48

不炒虚拟积分、不碰资金盘,消费增值闭环落地

好多搞创业、做电商的老板都在问&#xff1a;“靠绿色积分搞的商业模式&#xff0c;到底合不合法、合不合规呀&#xff1f;”这里大家有个误区&#xff0c;一个商业模式合不合规&#xff0c;关键得看项目方如何掌舵。是想借着政策好好推动绿色消费&#xff0c;实实在在扎根实体…

作者头像 李华
网站建设 2026/3/25 1:04:15

把 Git LFS 用对:从“救命工具”到“可持续提交策略”的一次梳理

很多团队第一次接触 Git LFS&#xff0c;往往源自一次事故&#xff1a;仓库突然膨胀到几个 G&#xff0c;clone 要十几分钟&#xff0c;CI 动不动超时&#xff0c;历史包袱甩不掉。LFS 被当作“紧急止血”的方案引入&#xff0c;却在后续使用中暴露出更多问题&#xff1a;有人忘…

作者头像 李华