news 2026/8/11 2:57:52

websocket功能开发

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
websocket功能开发

websocket.js

/** * @module initWebSocket 初始化 * @module websocketonopen 连接成功 * @module websocketonerror 连接失败 * @module websocketclose 断开连接 * @module resetHeart 重置心跳 * @module sendSocketHeart 心跳发送 * @module reconnect 重连 * @module sendMsg 发送数据 * @module websocketonmessage 接收数据 * @module test 测试收到消息传递 * @description socket 通信 * @param {any} url socket地址 * @param {any} websocket websocket 实例 * @param {any} heartTime 心跳定时器实例 * @param {number} socketHeart 心跳次数 * @param {number} HeartTimeOut 心跳超时时间 * @param {number} socketError 错误次数 */ let socketUrl = ""; // socket地址 let websocket = null; // websocket 实例 let heartTime = null; // 心跳定时器实例 let socketHeart = 0; // 心跳次数 const HeartTimeOut = 10000; // 心跳超时时间 10000 = 10s let socketError = 0; // 错误次数 // 初始化socket export const initWebSocket = (url) => { socketUrl = url; // 初始化 websocket websocket = new WebSocket(url); websocketonopen(); websocketonmessage(); websocketonerror(); websocketclose(); sendSocketHeart(); return websocket; }; // socket 连接成功 export const websocketonopen = () => { websocket.onopen = function () { console.log("连接 websocket 成功"); resetHeart(); }; }; // socket 连接失败 export const websocketonerror = () => { websocket.onerror = function (e) { console.log("连接 websocket 失败", e); }; }; // socket 断开链接 export const websocketclose = () => { websocket.onclose = function (e) { console.log("断开连接", e); }; }; // socket 重置心跳 export const resetHeart = () => { socketHeart = 0; socketError = 0; clearInterval(heartTime); sendSocketHeart(); }; // socket心跳发送 export const sendSocketHeart = () => { heartTime = setInterval(() => { // 如果连接正常则发送心跳 if (websocket.readyState == 1) { // if (socketHeart <= 30) { websocket.send("ping"); socketHeart = socketHeart + 1; } else { // 重连 reconnect(); } }, HeartTimeOut); }; // socket重连 export const reconnect = () => { if (socketError <= 2) { clearInterval(heartTime); initWebSocket(socketUrl); socketError = socketError + 1; console.log("socket重连", socketError); } else { console.log("重试次数已用完"); clearInterval(heartTime); } }; // socket 发送数据 export const sendMsg = (data) => { websocket.send(data); }; // socket 接收数据 export const websocketonmessage = () => { websocket.onmessage = function (e) { if (e.data.indexOf("heartbeat") > 0) { resetHeart(); } if (e.data.indexOf("pong") != -1) { return; } let data = JSON.parse(e?.data); dispatchCustomEvent('onmessageWS',data) }; }; // 创建一个用于触发自定义事件的函数 function dispatchCustomEvent(eventName, data) { const event = new CustomEvent(eventName, { detail: data }); window.dispatchEvent(event); }

引入websocket.js

import { initWebSocket, websocketclose } from '@/utils/websocket' created() { this.initPageSocket() // websocket方式 }, mounted() { window.addEventListener('onmessageWS', this.getSocketData) // 监听websocket自定义消息获取 setTimeout(() => { this.initPageSocket() }, 1000) }, methods: { /** 初始化Socket - 获取数据 */ initPageSocket() { let userId = this.$store.state.user.userId let protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://' let scoketUrl = `${protocol}${process.env.VUE_APP_WEBSOCKET_URL}/ymws?userId=${userId}` this.socket = initWebSocket(scoketUrl) }, // 获取报警-长连接推送 getSocketData(res) { let result = res.detail this.tableData.unshift(result) // if (this.alarmLists.length >= 5) { // let arr = this.alarmLists.slice(1, 5) // arr.unshift(result) // this.$set(this, 'alarmLists', arr) // } else { // this.alarmLists.unshift(result) // } }, } destroyed() { if (this.socket) websocketclose() window.removeEventListener('onmessageWS', this.getSocketData) }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/10 18:25:06

深度解析Upscayl批量放大功能的技术架构与优化策略

深度解析Upscayl批量放大功能的技术架构与优化策略 【免费下载链接】upscayl &#x1f199; Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy. 项目地址: https://gitcode.com/GitHub_Trending/up/upscay…

作者头像 李华
网站建设 2026/8/7 7:34:53

LightGlue实战指南:解锁图像特征匹配的新境界

LightGlue实战指南&#xff1a;解锁图像特征匹配的新境界 【免费下载链接】LightGlue LightGlue: Local Feature Matching at Light Speed (ICCV 2023) 项目地址: https://gitcode.com/gh_mirrors/li/LightGlue 在当今计算机视觉领域&#xff0c;LightGlue作为ICCV 2023…

作者头像 李华
网站建设 2026/8/9 17:26:41

护航峰值时刻:电商大促前系统测试全流程实战解析

一、大促测试的战略意义与挑战 随着"双11""618"等电商节日的常态化&#xff0c;大促期间的系统稳定性直接关系到企业的营收与品牌声誉。根据行业数据&#xff0c;2024年电商大促期间每秒交易峰值可达百万级&#xff0c;系统崩溃1分钟可能导致千万级经济损…

作者头像 李华
网站建设 2026/8/11 11:19:36

WezTerm终端美化终极指南:从视觉疲劳到效率爆发的完整教程

WezTerm终端美化终极指南&#xff1a;从视觉疲劳到效率爆发的完整教程 【免费下载链接】wezterm A GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust 项目地址: https://gitcode.com/GitHub_Trending/we/wezterm …

作者头像 李华
网站建设 2026/8/9 15:41:28

测试成熟度模型评估:从基础建设到卓越运营的演进之路

1. 测试成熟度模型概述与演进历程 测试成熟度模型&#xff08;Testing Maturity Model&#xff09;是评估组织测试过程能力和成熟度水平的系统化框架。自20世纪90年代初期&#xff0c;随着软件工程研究所&#xff08;SEI&#xff09;的能力成熟度模型&#xff08;CMM&#xff…

作者头像 李华
网站建设 2026/8/11 16:08:54

软件测试成本控制全攻略:从策略到实践的降本增效

测试成本控制的战略价值在数字化转型加速的2025年&#xff0c;软件测试已从单纯的质量保障环节跃升为影响项目投资回报率的关键因素。据行业数据显示&#xff0c;高效的测试成本控制可使项目总成本降低15%-25%&#xff0c;同时将缺陷泄露率控制在1.5%以下。本文将从测试策略优化…

作者头像 李华