Vue websocket的封装及使用

创建 WebSocket 连接的函数

  1. 创建 WebSocket 连接:通过传入的 url 参数创建一个 WebSocket 实例。

  2. 监听连接打开事件:当连接成功建立时,执行传入的 onOpen 回调函数。

  3. 监听消息接收事件:当接收到消息时,将消息解析为 JSON
    格式,然后执行传入的 onMessage 回调函数,并将解析后的消息作为参数传递给回调函数。如果未传入 onMessage 回调函数,则禁止重新连接。

  4. 监听错误事件:当发生错误时尝试重新连接。

  5. 监听连接关闭事件:当连接关闭时,如果不需要重新连接,则关闭WebSocket 连接,否则尝试重新连接。

  6. 重新连接:在可以重新连接且未锁定重新连接状态时,延迟 5 秒后重新连接。

  7. 心跳检测:每隔 15 秒向服务器发送心跳消息以保持连接。

  8. 发送消息:如果 WebSocket 连接已经打开,则发送消息给服务器;否则打印错误信息。

  9. 关闭WebSocket 连接:设置标志位 needReconnect 为 false,然后关闭 WebSocket 连接。

封装的websocket.js文件内容如下:

export function createWebSocket(url, onOpen, onMessage) {if (!url) {return;}let canReconnect = true;// 避免重复连接let lockReconnect = false;let needReconnect = true;let ws = null;connect();heartCheck();return {ws,sendMessage,closeWs,};// 连接服务端function connect() {ws = new WebSocket(url);ws.onopen = function () {if (onOpen) {onOpen();}};ws.onmessage = function (msg) {if (msg && msg.data) {let response = JSON.parse(msg.data);console.log(response);if (onMessage) {onMessage(response);} else {canReconnect = false;}}};ws.onerror = function () {reconnect();};ws.onclose = function () {console.log("close");if (!needReconnect) {ws.close();} else {reconnect();}};}// 重新连接服务端function reconnect() {if (!canReconnect || lockReconnect) {return;}console.log("reconnect", "reconnect");lockReconnect = true;setTimeout(function () {connect();lockReconnect = false;}, 5000);}// 保持心跳连接function heartCheck() {if (ws && ws.readyState === 1) {ws.send(JSON.stringify({id: new Date().getTime(),method: "PING",}));}setTimeout(function () {heartCheck();}, 15000);}function sendMessage(message) {if (ws && ws.readyState === 1) {ws.send(message);} else {console.log("WebSocket is not open");}}function closeWs() {needReconnect = false;ws.close();}
}
  • ws 变量是 WebSocket 的实例,可以用于其他操作,比如手动触发事件、监听其他事件等。
  • sendMessage方法可以用于发送消息给服务器。它接受一个参数,即要发送的消息内容。
  • closeWs 方法可以用于关闭 WebSocket连接,并停止重连。调用这个方法之后,将不会再尝试重新连接服务器。(如果是自己主动关闭的话)

使用方法

<script>
import { createWebSocket } from "@/utils/websocket.js";
export default {
data(){
return{
websocket: null
}}
methods:{
handleOnOpen() {if (this.websocket) {let data = {你要订阅的信息};this.sendMessage(JSON.stringify(data));}},sendMessage(data) {this.websocket.sendMessage(data);},getMessage(e) {console.log(e, "接收到的数据");
}
},mounted() {
this.websocket = createWebSocket(wss:xxxxx,//websocket链接的urlthis.handleOnOpen,this.getMessage);
}
}
</script>	

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

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

相关文章

NLP基础——TF-IDF

TF-IDF TF-IDF全称为“Term Frequency-Inverse Document Frequency”&#xff0c;是一种用于信息检索与文本挖掘的常用加权技术。该方法用于评估一个词语&#xff08;word&#xff09;对于一个文件集&#xff08;document&#xff09;或一个语料库中的其中一份文件的重要程度。…

如何删除K8S中的Pod

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

全国(山东、安徽)职业技能大赛--信息安全管理与评估大赛题目+答案讲解——linux应急响应篇

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步…

图论及其应用的一些论断---选择题

在任意一个网络N=(X,Y,I,A,c)中,最大流的值等于最小割的容量。在任意6个人的集会上,要么有3个人互相认识,要么有3个人互不认识。若G为无向简单图,则图G的边数ε,点数v之间有: ε < = ( v 2 ) ε<=\binom{v}{2} ε<=

代码随想录|贪心day2

122.力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 买股票的最佳时机&#xff0c;这道题其实和53有一点像&#xff0c;因为不需要写出哪个区间卖出买进&#xff0c;所以判断prices[i] - prices[i - 1]的值的大小&#xff0c;如果这个值是正的&#…

修复异常关机导致CentOS文件系统内存数据损坏的问题

今天一同事重启wifi直接拔的电源&#xff0c;导致服务器异常关机&#xff0c;重启之后发现虚拟机报错&#xff1a; [17.874068] xTS (dm-8): Corruption of in-memory data detected. Shutting dowm filesystem[17.874069] XTS (dm-8): Please umount the f ilesystem and rect…

kotlin first/last/indexOf/elementAt

kotlin 中 first 是取集合元素中第一个元素 last 是取集合元素中最后一个元素 indexOf 根据元素寻找下标&#xff0c;默认是第一个 elementAt 根据下标找元素 下面写一个demo 说明下他们几个的使用 val list listOf("A", "D", "A", "…

java 打印日志的几种方式

java 打印日志的几种方式 Java 日志框架进化史日志门面与日志系统 Log4jslf4jLog4j2slf4jLogbackslf4j 一、先简单介绍五种 &#xff08;1&#xff09;最简单的方式&#xff0c;就是system.println.out(error) ,这样直接在控制台打印消息了&#xff1b; &#xff08;2&#xff…

龙格-库塔(Runge–Kutta)法 (Dopri5, Euler method,Explicit midpoint method)

在数值分析中&#xff0c;龙格-库塔方法是一系列隐式和显式迭代方法&#xff0c;其中包括欧拉方法&#xff0c; 显式中心点法&#xff0c; ,后向欧拉方法, &#xff0c;用于联立非线性方程近似解的时间离散化。[2]这些方法是由德国数学家Carl Runge和Wilhelm Kutta。 显式欧拉…

如何在iPhone设备中查看崩溃日志

​ 目录 如何在iPhone设备中查看崩溃日志 摘要 引言 导致iPhone设备崩溃的主要原因是什么&#xff1f; 使用克魔助手查看iPhone设备中的崩溃日志 奔溃日志分析 总结 摘要 本文介绍了如何在iPhone设备中查看崩溃日志&#xff0c;以便调查崩溃的原因。我们将展示三种不同的…

打破无声世界:让您的网站会说话

导语&#xff1a;在当今的互联网世界&#xff0c;技术创新日新月异&#xff0c;为广大开发者提供了无数便捷的工具。本文将为您介绍前端文本语音API&#xff0c;这一神奇的技术能够实现文字到语音的转换&#xff0c;为您的项目增添更多可能性。同时&#xff0c;我们还将为您提供…

uniapp中uview组件库的Input 输入框 的使用方法

目录 #平台差异说明 #基本使用 #输入框的类型 #可清空字符 #下划线 #前后图标 #前后插槽 API #Props #Events #Methods #Slots 去除fixed、showWordLimit、showConfirmBar、disableDefaultPadding、autosize字段 此组件为一个输入框&#xff0c;默认没有边框和样式…

UE5 VR版增强输入初体验 官方模板学习

问题 我们传统的输入方式&#xff0c;是通过编辑器设置输入操作映射&#xff0c;然后BindAction和BindAxis绑定 这边插播一条增强输入知识点&#xff0c;参考知乎大佬文章 和增强输入的VR模板教学&#xff1a;如何使用VR模板在UE5中使用增强输入系统_哔哩哔哩_bilibili 实践操…

Linux下查看CPU信息

#lscpu Architecture: x86_64&#xff0c;表示系统的处理器架构为x86-64。CPU op-mode(s): 32-bit, 64-bit&#xff0c;表示处理器支持32位和64位操作系统。Byte Order: Little Endian&#xff0c;表示系统使用的字节序为小端序。CPU(s): 96&#xff0c;表示系统中有96个CPU核…

再见2023,你好2024(附新年烟花python实现)

亲爱的朋友们&#xff1a; 写点什么呢&#xff0c;我已经停更两个月了。2023年快结束了&#xff0c;时间真的过得好快&#xff0c;总要写点什么留下纪念吧。这一年伴随着许多挑战和机会&#xff0c;给了我无数的成长和体验。坦白说&#xff0c;有时候我觉得自己好像是在时间的…

2024最新SLAM实习、秋招面经(百度、华为、小米、蔚来、理想、美团、阿里菜鸟……)

秋招已经结束&#xff0c;大大小小面了50场左右&#xff0c;就此开始慢慢整理一下&#xff0c;希望可以给看到的同学一点帮助~ 整理期间免费开放&#xff0c;整理完毕后打算设置成VIP可见&#xff0c;赚点小外快 个人BG&#xff1a;双非本&#xff0c;985硕。主要研究方向包括…

【PostgreSQL】约束-外键

【PostgreSQL】约束链接 检查 唯一 主键 外键 排他 外键 外键是关系数据库中的一个概念&#xff0c;用来建立表与表之间的关系。它是指一个表中的字段&#xff08;或字段组合&#xff09;&#xff0c;用来关联另一个表的主键&#xff08;或唯一标识字段&#xff09;。通过外…

FPGA - 240102 - FPGA期末速成

TAG - F P G A 、期末、速成 FPGA、期末、速成 FPGA、期末、速成 // – 习题1 – //CPLD&#xff08;Complex Programmable Logic Device&#xff09;是 Complex PLD 的简称&#xff0c;一种较 PLD 为复杂的逻辑元件。CPLD 逻辑资源多寄存器少&#xff0c;FPGA 逻辑弱而寄存器…

Go后端开发 -- main函数 变量 常量 函数

Go后端开发 – main函数 & 变量 & 常量 & 函数 文章目录 Go后端开发 -- main函数 & 变量 & 常量 & 函数一、第一个main函数1.创建工程2.main函数解析 二、变量声明1.单变量声明2.多变量声明 三、常量1.常量的定义2.优雅的常量 iota 四、函数1.函数返回…

vim学习记录

目录 历史记录前言相关资料配置windows互换ESC和Caps Lock按键 基本操作替换字符串 历史记录 2024年1月2日, 搭建好框架,开始学习; 前言 vim使用很久了,但是都是一些基本用法,主要是用于配置Linux,进行一些简单的编写文档和程序.没有进行过大型程序开发,没有达到熟练使用的程…