当前位置: 首页 > news >正文

Vue3_开启全局websocket

1、封装websocket

新建文件夹"socket.ts",路径:"@/utils/socket"

export default (onMessage: Function) => {let socketUrl = 'ws://171.29.8.218:8080/ems/ws/screen' //socket请求地址let socket: WebSocketlet lockReconnect = falselet timer: ReturnType<typeof setTimeout>const createSocket = () => {try {socket = new WebSocket(socketUrl)init()} catch (e) {console.log('catch' + e)reconnect()}}const reconnect = () => {if (lockReconnect) returnlockReconnect = trueclearTimeout(timer)timer = setTimeout(() => {createSocket()}, 4000)}const init = () => {socket.onopen = function (event) {console.log('WebSocket:已连接')//心跳检测重置heartCheck.reset().start()}//接收到消息的回调方法socket.onmessage = function (event) {console.log('WebSocket:收到一条消息', event.data)const isHeart = /pong/.test(event.data)if (onMessage && !isHeart) {//触发自定义onMessageonMessage.call(null, event)}heartCheck.reset().start()}//连接发生错误的回调方法socket.onerror = function (event) {console.log('WebSocket:发生错误')reconnect()}//连接关闭的回调方法socket.onclose = function (event) {console.log('WebSocket:已关闭')heartCheck.reset() //心跳检测reconnect()}//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常window.onbeforeunload = function () {socket.close()}}var heartCheck = {timeout: 8000,timeoutObj: setTimeout(() => {}),serverTimeoutObj: setInterval(() => {}),reset: function () {clearTimeout(this.timeoutObj)clearTimeout(this.serverTimeoutObj)return this},start: function () {var self = thisclearTimeout(this.timeoutObj)clearTimeout(this.serverTimeoutObj)this.timeoutObj = setTimeout(function () {//这里发送一个心跳,后端收到后,返回一个心跳消息,//onmessage拿到返回的心跳就说明连接正常socket.send(JSON.stringify({action: 'ping'}))self.serverTimeoutObj = setTimeout(function () {//如果超过一定时间还没重置,说明后端主动断开了(因此timeout设定时间要比后端返回socket间隔时间长,否则会判定后端主动断开)console.log('关闭服务')socket.close() //如果onclose会执行reconnect,我们执行 websocket.close()就行了.如果直接执行 reconnect 会触发onclose导致重连两次}, self.timeout)}, this.timeout)}}createSocket()
}

2、全局注册

在文件夹"main.ts"中

import Websocket from "./utils/socket"
const onMessageList: Array<Function> = []; // 声明一个全局变量来收集onMessage列表,因为在不同的页面可能会有不同的处理
app.provide("onMessageList", onMessageList); // 全局注入
const onMessage = (event: any) => {// 遍历onMessage集合并触发onMessageList.forEach(f => {f.call(null, event);})
}
Websocket(onMessage); // 启动websocket

3、页面使用

import { inject } from "vue";
const onMessageList = inject("onMessageList"); // 接收注入
const socketMessage = (res) => {const data = JSON.parse(res.data); // 获取数据
};
onMessageList.push(socketMessage); // 将自定义处理事件插入onMessge集合

相关文章:

Vue3_开启全局websocket

1、封装websocket 新建文件夹"socket.ts"&#xff0c;路径&#xff1a;"/utils/socket" export default (onMessage: Function) > {let socketUrl ws://171.29.8.218:8080/ems/ws/screen //socket请求地址let socket: WebSocketlet lockReconnect f…...

PTA 社交集群

当你在社交网络平台注册时&#xff0c;一般总是被要求填写你的个人兴趣爱好&#xff0c;以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同的人的集合。你需要找出所有的社交集群。 输入格式 输入在第一行给出一个正整数 N&#xff08;≤1000&…...

USB Type-C 受电端取电快充协议芯片,支持PD+QC+FCP+SCP+AFC快充协议

前言 随着科技的飞速发展&#xff0c;电子设备对于快速充电的需求日益增加。为了满足这一需求&#xff0c;市场上涌现出了众多快充技术和产品。其中&#xff0c;XSP08Q诱骗取电芯片以其卓越的性能和广泛的应用场景&#xff0c;成为了快充领域的一颗璀璨明星。本文将对XSP08Q P…...

C++ 模板专题 - 参数约束

一&#xff1a;概述&#xff1a; 除了使用SFINAE对模板参数进行约束之外&#xff0c;还可以使用概念&#xff08;Concepts&#xff09;来对模板参数进行约束&#xff0c;确保传入的类似满足特定条件。概念&#xff08;Concepts&#xff09;是C20中引入的&#xff0c;概念是用于…...

电商行业 | 用好企业培训工具,打造精英团队!

在竞争激烈的电商行业中&#xff0c;人才是企业最宝贵的资源。如何持续提升员工的专业技能和服务水平&#xff0c;打造一支高效、专业的金牌员工队伍&#xff0c;是每个电商企业面临的重要课题。企业培训工具作为提升员工能力的关键手段&#xff0c;正逐渐成为电商行业不可或缺…...

python进阶集锦

一、迭代器和生成器 区别 关于迭代器和生成器 迭代器与生成器的区别 迭代器&#xff08;Iterator&#xff09;和生成器&#xff08;Generator&#xff09;是Python中处理序列数据的两种不同概念。迭代器是遵循迭代协议的对象&#xff0c;而生成器是一种特殊类型的迭代器&am…...

8.C++小练习

C小练习 1.练习 1.练习 计算器—加减乘除 函数调用 //简单的计算器 #include <iostream>using namespace std;//封装函数 int add(int a,int b){return a b; }int jian(int a, int b){return a - b; }int cheng(int a,int b){return a * b; }double chu(int a,int b){r…...

实现YOLO V3数据加载器:从文件系统读取图像与标签

引言 在深度学习项目中&#xff0c;数据准备是非常重要的一环。特别是在物体检测任务中&#xff0c;数据的组织和预处理直接影响到模型的训练效果。YOLO V3&#xff08;You Only Look Once Version 3&#xff09;作为一种高效的实时物体检测框架&#xff0c;其数据加载器的设计…...

安装pygod

了解pygod。 It is recommended to use pip for installation. Please make sure the latest version is installed, as PyGOD is updated frequently: pip install pygod # normal install pip install --upgrade pygod # or update if needed如果pip不是最新的&…...

探索Python与Excel的无缝对接:xlwings库的神秘面纱

文章目录 探索Python与Excel的无缝对接&#xff1a;xlwings库的神秘面纱1. 背景介绍&#xff1a;为何选择xlwings&#xff1f;2. xlwings是什么&#xff1f;3. 如何安装xlwings&#xff1f;4. 简单的库函数使用方法打开工作簿创建工作簿读取单元格数据写入单元格数据保存并关闭…...

CISE|暴雨受邀出席第二十六届中国国际软件博览会

10月24日至26日&#xff0c;备受瞩目的第二十六届中国国际软件博览会&#xff08;简称CISE&#xff09;在国家会展中心&#xff08;天津&#xff09;圆满举办。CISE不仅汇聚了来自全国各地的顶尖软件企业和机构&#xff0c;还吸引了众多专家学者和行业精英共襄盛举&#xff0c;…...

OpenEuler22.03-sp2下安装docker-非常实用

1、确定系统版本是openEuler22.03-SP2 [root192 ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.23.tgz #或者自己下载之后上传到/root下&#xff0c;测试最好是自己下载到本地再上传到服务器上 下载地址&#xff1a;https://download.dock…...

【学术会议论文投稿】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南

【JPCS独立出版】​第三届能源与动力工程国际学术会议&#xff08;EPE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看&#xff1a;https://ais.cn/u/nuyAF3 引言 在快速发展的前端技术领域&#xff0c;选择合适的框架或库对于项目的成功至关重要。React、Vu…...

[0152].第3节:IDEA中工程与模块

我的后端学习大纲 IDEA大纲 1、Project和Module的概念&#xff1a; 2、Module操作&#xff1a; 2.1.创建Module: 2.2.删除Module&#xff1a; 2.3.导入Module&#xff1a; 1.导入外来模块的代码&#xff1a; 查看Project Structure&#xff0c;选择import module&#xff1a…...

【modbus协议】libmodbus库移植基于linux平台

文章目录 下载库函数源码编译路径添加libmodbus 源码分析核心数据结构常用接口函数 开发 TCP Server 端开发TCP Client 端 下载库函数源码 编译路径添加 libmodbus 源码分析 核心数据结构 modbus_t结构体&#xff1a; 这是 libmodbus 的核心数据结构&#xff0c;代表一个 Mod…...

SpringBoot+Minio实现多文件下载和批量下载

文章目录 SpringBoot+minio实现多文件下载1、SpringBoot+minio实现多文件打成一个压缩包下载1. 添加依赖2. 配置 MinIO 客户端3. 创建下载和压缩逻辑4. 创建控制器方法来触发下载5. 测试下载功能注意事项2、在minio指定的桶名下面生产一个文件夹1. MinIO 配置2. 编写业务逻辑文…...

3.swoole安装【Docker】

一、拉取最新 swoole 镜像 docker pull phpswoole/swoole二、第一次启动swoole容器 docker run --name swoole phpswoole/swoole 三、 拷贝配置文件 docker cp swoole:/var/www /docker/swoole四、 停止 swoole 容器 dcoker stop swoole五、 删除第一次启动的swoole容器 d…...

React 探秘(三): 时间切片

文章目录 背景时间切片原理requestIderCallback 方法setImmediateMessageChannelsetTimeout React 18 时间切片源码手撸时间切片问题拆解构建任务队列宏任务包装首次开启任务递归任务执行workLoop 开启工作循环demo 模拟 总结 背景 前文学习了 fiber 架构和双缓存技术&#xff…...

OSError: Can‘t load tokenizer for ‘bert-base-uncased‘.

一、具体报错&#xff1a; 报错如下&#xff1a; OSError: Cant load tokenizer for bert-base-uncased. If you were trying to load it from https://huggingface.co/models, make sure you dont have a local directory with the same name. Otherwise, make sure bert-bas…...

中国人寿财险青岛市分公司:专业团队,卓越服务

中国人寿财险青岛市分公司拥有一支专业的团队&#xff0c;为客户提供卓越的保险服务。 公司的保险从业人员都经过严格的专业培训和考核&#xff0c;具备扎实的保险知识和丰富的实践经验。他们以客户为中心&#xff0c;用心倾听客户需求&#xff0c;为客户提供个性化的保险方案…...

基于AI智能体群组的网站自动化测试:原理、配置与实战

1. 项目概述&#xff1a;用AI智能体群组自动化测试你的网站 最近在折腾一个本地开发的项目&#xff0c;前端页面越做越复杂&#xff0c;每次手动点点点测试UI、检查链接、看看响应式布局&#xff0c;实在是费时费力。直到我发现了 browser-use/vibetest-use 这个项目&#x…...

Switch大气层系统:从零开始掌握自定义固件的完整指南

Switch大气层系统&#xff1a;从零开始掌握自定义固件的完整指南 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 大气层系统&#xff08;Atmosphere&#xff09;是任天堂Switch平台上最强大…...

环境配置与基础教程:保姆级教程:VS Code DevContainer 一键构建可复现的 YOLO 训练开发容器

摘要 你是否还在为YOLO训练环境的搭建而焦头烂额?CUDA版本不匹配、Python依赖冲突、团队协作时“在我机器上能跑”的经典难题——这些问题浪费了无数开发者的宝贵时间。本文将带你通过VS Code DevContainer技术,一键构建完全可复现的YOLO训练开发容器,彻底告别环境配置噩梦…...

ViGEmBus虚拟手柄驱动完全指南:Windows游戏手柄兼容性终极解决方案

ViGEmBus虚拟手柄驱动完全指南&#xff1a;Windows游戏手柄兼容性终极解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否厌倦了在Windows上使用…...

基于MCP协议构建本地AI多代理协作平台:Roundtable AI实战指南

1. 项目概述&#xff1a;告别单打独斗&#xff0c;开启AI圆桌会议如果你和我一样&#xff0c;每天在IDE里写代码、调试、优化&#xff0c;那你肯定也经历过这种场景&#xff1a;遇到一个复杂的性能问题&#xff0c;你打开Claude的聊天窗口&#xff0c;把前端错误日志贴进去&…...

如何高效配置开源工具:华硕笔记本性能管理的完整解决方案

如何高效配置开源工具&#xff1a;华硕笔记本性能管理的完整解决方案 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…...

前端工程化:代码审查最佳实践

前端工程化&#xff1a;代码审查最佳实践 前言 代码审查是保障代码质量的第一道防线。一个好的代码审查流程不仅能发现潜在的bug&#xff0c;还能促进团队知识共享&#xff0c;提升整体代码水平。今天我就来给大家讲讲如何建立一套高效的代码审查流程。 什么是代码审查 代码审查…...

【STM32F407 DSP实战】矩阵运算基础:从初始化到加减法与求逆的嵌入式实现

1. 为什么要在STM32F407上实现矩阵运算 在嵌入式开发中&#xff0c;矩阵运算可以说是无处不在。从简单的PID控制到复杂的图像处理算法&#xff0c;都离不开矩阵这个基础数据结构。就拿我最近做的一个四轴飞行器项目来说&#xff0c;姿态解算部分就需要频繁地进行矩阵乘法、求逆…...

CANN/asc-devkit设置核间同步基地址API

asc_set_ffts_base_addr 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https:/…...

FPGA加速中性原子量子计算机的原子检测技术

1. 中性原子量子计算机的原子检测挑战量子计算领域近年来最激动人心的进展之一&#xff0c;就是中性原子量子计算机的快速发展。这种量子计算机利用激光镊子&#xff08;光学镊子&#xff09;阵列来捕获和排列中性原子&#xff08;如铷、铯等碱金属原子&#xff09;&#xff0c…...