在 Vue 中使用 ReconnectingWebSocket

ReconnectingWebSocket 是一个自动重连的 WebSocket 实现,非常适合在 Vue 项目中使用。下面是如何在 Vue 中集成和使用它的方法:

搜索  "程序员老狼"

安装 ReconnectingWebSocket

首先,你需要安装 ReconnectingWebSocket 库:

npm install reconnecting-websocket
# 或者
yarn add reconnecting-websocket

基本使用方法

1. 在组件中直接使用

import ReconnectingWebSocket from 'reconnecting-websocket';export default {data() {return {socket: null,messages: []};},mounted() {// 创建 WebSocket 连接this.socket = new ReconnectingWebSocket('ws://your-websocket-url');// 监听消息this.socket.addEventListener('message', (event) => {this.messages.push(event.data);});// 监听连接打开this.socket.addEventListener('open', () => {console.log('WebSocket connected');});// 监听错误this.socket.addEventListener('error', (error) => {console.error('WebSocket error:', error);});// 监听连接关闭this.socket.addEventListener('close', () => {console.log('WebSocket disconnected');});},methods: {sendMessage(message) {if (this.socket && this.socket.readyState === WebSocket.OPEN) {this.socket.send(message);}}},beforeDestroy() {// 组件销毁时关闭连接if (this.socket) {this.socket.close();}}
};

2. 作为 Vue 插件使用(推荐)

为了更好的复用性,可以创建一个 Vue 插件:

​src/plugins/websocket.js​

import ReconnectingWebSocket from 'reconnecting-websocket';const WebSocketPlugin = {install(Vue, options) {const socket = new ReconnectingWebSocket(options.url, [], {connectionTimeout: options.timeout || 5000,maxRetries: options.maxRetries || 10});Vue.prototype.$socket = socket;// 添加全局方法Vue.prototype.$connectWebSocket = function() {socket.reconnect();};Vue.prototype.$disconnectWebSocket = function() {socket.close();};}
};export default WebSocketPlugin;

​在 main.js 中注册插件​

import Vue from 'vue';
import WebSocketPlugin from './plugins/websocket';Vue.use(WebSocketPlugin, {url: 'ws://your-websocket-url',timeout: 5000,maxRetries: 10
});

​在组件中使用​

export default {mounted() {this.$socket.addEventListener('message', (event) => {console.log('Received message:', event.data);});// 发送消息this.$socket.send('Hello, server!');},beforeDestroy() {// 可选:关闭连接this.$disconnectWebSocket();}
};

高级配置选项

ReconnectingWebSocket 提供了多种配置选项:

const socket = new ReconnectingWebSocket('ws://your-websocket-url', [], {// 自动重连的最小延迟时间(毫秒)minReconnectionDelay: 1000,// 自动重连的最大延迟时间(毫秒)maxReconnectionDelay: 5000,// 重连延迟时间的增长因子reconnectionDelayGrowFactor: 1.3,// 连接超时时间(毫秒)connectionTimeout: 4000,// 最大重试次数,Infinity 表示无限重试maxRetries: Infinity,// 是否在关闭时自动重连automaticOpen: true,// 是否在连接丢失时立即尝试重连startClosed: false,// 调试模式debug: false
});

注意事项

  1. ​跨域问题​​:确保你的 WebSocket 服务器支持跨域请求
  2. ​SSL​​:生产环境建议使用 wss:// 而不是 ws://
  3. ​组件销毁​​:记得在组件销毁时关闭连接,避免内存泄漏
  4. ​响应式数据​​:WebSocket 消息不是响应式的,需要手动更新 Vue 的数据
  5. ​重连策略​​:根据业务需求调整重连策略参数

完整示例

<template><div><h1>WebSocket Demo</h1><button @click="sendMessage">Send Message</button><div v-for="(msg, index) in messages" :key="index">{{ msg }}</div></div>
</template><script>
import ReconnectingWebSocket from 'reconnecting-websocket';export default {data() {return {socket: null,messages: [],connectionStatus: 'disconnected'};},mounted() {this.initWebSocket();},methods: {initWebSocket() {this.socket = new ReconnectingWebSocket('ws://your-websocket-url', [], {minReconnectionDelay: 1000,maxRetries: 10});this.socket.addEventListener('open', () => {this.connectionStatus = 'connected';console.log('WebSocket connected');});this.socket.addEventListener('message', (event) => {this.messages.push(event.data);});this.socket.addEventListener('error', (error) => {this.connectionStatus = 'error';console.error('WebSocket error:', error);});this.socket.addEventListener('close', () => {this.connectionStatus = 'disconnected';console.log('WebSocket disconnected');});},sendMessage() {if (this.socket && this.socket.readyState === WebSocket.OPEN) {this.socket.send('Hello from Vue!');}}},beforeDestroy() {if (this.socket) {this.socket.close();}}
};
</script>

通过这种方式,你可以在 Vue 应用中轻松实现具有自动重连功能的 WebSocket 通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95144.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95144.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95144.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能体革命:网络安全人的角色重塑与突围指南

AI赋能千行百业的趋势不可逆转&#xff0c;当AI学会渗透测试&#xff0c;安全工程师的出路在哪里&#xff1f; 2025年8月7日&#xff0c;OpenAI正式发布GPT-5的消息刷屏科技圈。这个达到博士生水平的“统一”人工智能模型&#xff0c;将AI幻觉率降低60%&#xff0c;成本下降45%…

用于水T1值和脂肪分数量化的上半身自由呼吸磁共振指纹成像|文献速递-医学影像算法文献分享

Title题目Upper-body free-breathing Magnetic Resonance Fingerprinting applied tothe quantification of water T1 and fat fraction用于水T1值和脂肪分数量化的上半身自由呼吸磁共振指纹成像 01文献速递介绍磁共振指纹成像&#xff08;MRF&#xff09;是十年前推出的一种高…

Apache RocketMQ:消息可靠性、顺序性与幂等处理的全面实践

Apache RocketMQ 是一个高性能、高可靠的分布式消息中间件&#xff0c;广泛应用于异步通信、事件驱动架构和分布式系统中。本文深入探讨 RocketMQ 的消息可靠性、顺序性和幂等处理机制&#xff0c;结合 Redisson 分布式锁实现幂等消费&#xff0c;提供详细的代码示例和实践建议…

无服务器日志分析由 Elasticsearch 提供支持,推出新的低价层

作者&#xff1a;来自 Elastic Log Analytics Elastic Observability Logs Essentials 在 Elastic Cloud Serverless 上提供成本效益高、无麻烦的日志分析。 SREs 可以摄取、搜索、丰富、分析、存储和处理日志&#xff0c;而无需管理部署的运营开销。[](https://www.elastic.co…

(Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集

Phantom-Data&#xff1a;迈向通用的主体一致性视频生成数据集 paper是字节发布在Arxiv2025的工作 paper title&#xff1a;Phantom-Data: Towards a General Subject-Consistent Video Generation Dataset Code&#xff1a;链接 Abstract 近年来&#xff0c;主体到视频&#…

如何解决pip安装报错ModuleNotFoundError: No module named ‘mlflow’问题

【Python系列Bug修复PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘mlflow’问题 摘要 在Python开发中&#xff0c;pip install 报错是一种常见问题&#xff0c;尤其是在使用集成开发环境&#xff08;IDE&#xff09;如PyCharm时…

2020/12 JLPT听力原文 问题一 3番

3番&#xff1a;会社で女の人と男の人が話しています。女の人は倉庫に入るとき、どの順番で入口のボタンを押さなければなりませんか。 女&#xff1a;すみません。地下の倉庫に行って、資料を取ってきたいんですが、入口の開け方がわからなくて… 男&#xff1a;ああ、最近、管…

C#/.NET/.NET Core技术前沿周刊 | 第 49 期(2025年8.1-8.10)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

基于强化学习的目标跟踪 研究初探

强化学习 目标跟踪Visual tracking by means of deep reinforcement learning and an expert demonstratorYOLO 检测下基于 ETC-DDPG 算法的无人机视觉跟踪基于特征与深度强化学习方法的机器人视觉伺服技术研究高性能可拓展视频目标跟踪算法研究基于目标运动与外观特征的多目标…

排序与查找,简略版

数组的排序 排序的基本介绍 排序是将一组数据&#xff0c;按照一定顺序进行排列的过程 排序的分类&#xff1a; 内部排序&#xff1a; 一次性适用数据量小的情况 将需要处理的数据都加载到内部存储器中进行排序。包括交换式排序&#xff0c;选择式排序&#xff0c;插入式排序 外…

打靶日常-XSS(反射型和存储型)

目录 小皮: 1. 2.这里需要登录,我们之前爆破出账号密码在这里就可以用​编辑 登录之后:​编辑 使用工具: 先输入正确字符进行测试:aaa 进行测试: 3.换种控制台显示 结果:(使用f12大法) DVWA: 反射型XSS: 低: ​编辑 中:大小写绕过: ​编辑 也可以双写绕过: ​编…

二叉搜索树深度解析:从原理实现到算法应用----《Hello C++ Wrold!》(18)--(C/C++)

文章目录前言二叉搜索树&#xff08;二叉排序树或二叉查找树&#xff09;二叉搜索树的模拟实现二叉搜索树和有序数组二分查找的比较两个搜索模型作业部分前言 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;作为一种重要的树形数据结构&#xff0…

牛客.空调遥控二分查找牛客.kotori和气球(数学问题)力扣.二叉树的最大路径和牛客.主持人调度(二)

目录 牛客.空调遥控 二分查找 牛客.kotori和气球&#xff08;数学问题) 力扣.二叉树的最大路径和 牛客.主持人调度(二) 牛客.空调遥控 枚举n个空调之后&#xff0c;使数组有序&#xff0c;左右下标&#xff0c;用二分查找&#xff0c;然后一个求 长度就好 二分查找 /二分理…

《嵌入式Linux应用编程(二):标准IO高级操作与文件流定位实战》

今日学习内容1. 行输入函数安全实践(1) fgets vs gets函数安全特性换行符处理缓冲区保护fgets指定读取长度&#xff08;size-1&#xff09;保留\n并添加\0安全&#xff08;防溢出&#xff09;gets无长度限制将\n替换为\0危险2. Linux标准文件流文件流符号设备 标准输入stdin键盘…

Springboot2+vue2+uniapp 小程序端实现搜索联想自动补全功能

目录 一、实现目标 1.1 需求 1.2 实现示例图: 二、实现步骤 2.1 实现方法简述 2.2 简单科普 2.3 实现步骤及代码 一、实现目标 1.1 需求 搜索联想——自动补全 &#xff08;1&#xff09;实现搜索输入框&#xff0c;用户输入时能显示模糊匹配结果 &am…

极简 5 步:Ubuntu+RTX4090 源码编译 vLLM

极简 5 步&#xff1a;UbuntuRTX4090 源码编译 vLLM1. 系统依赖&#xff08;一次性&#xff09;2. 进入源码目录 & 激活环境3. 启用 ccache 自动并行度4. 拉代码 编译&#xff08;2 行搞定&#xff09;5. 更新 flash-attn&#xff08;与 vLLM 配套&#xff09;6. 启动 4 …

生产工具革命:定制开发开源AI智能名片S2B2C商城小程序重构商业生态的范式研究

摘要互联网作为信息工具已深刻改变商业生态&#xff0c;但其本质仍停留在效率优化层面。本文提出&#xff0c;基于定制开发开源AI智能名片与S2B2C商城小程序的深度融合&#xff0c;正在引发生产工具层面的革命性变革。该技术架构通过重构"人-货-场"关系&#xff0c;实…

Transformer前传:Seq2Seq与注意力机制Attention

前言 参考了以下大佬的博客 https://blog.csdn.net/v_july_v/article/details/127411638 https://blog.csdn.net/andy_shenzl/article/details/140146699 https://blog.csdn.net/weixin_42475060/article/details/121101749 https://blog.csdn.net/weixin_43334693/article/det…

企业架构工具篇之ArchiMate的HelloWorld(2)

本文通过ArchiMate做一个员工报销流程设计的小demo,按照步骤都可以做出来,在做这个demo之前先简单认识下Archimate的开发界面: 模型树(Models)窗口:通常位于左上方,以树形结构展示一个或多个 ArchiMate 模型。用户可在此浏览模型的整体结构,快速定位到特定的模型元素,…

Docker 详解(保姆级安装+配置+使用教程)

文章目录一、初识 Docker二、Docker 命令1、安装2、配置镜像加速器检查配置是否生效3、服务相关命令4、镜像相关命令5、容器相关命令三、Docker 容器数据卷1、数据卷概念2、数据卷作用3、配置数据卷4、配置数据卷容器四、Docker 应用部署五、备份与迁移六、Dockerfile七、Docke…