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

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) }
http://www.rkmt.cn/news/117157.html

相关文章:

  • 分布式电源接入对配电网影响分析 关键词:分布式电源 配电网 评估 参考文档:《自写文档,联系我...
  • 突破功率密度瓶颈:SiC器件在通信电源中的应用与LLC变换器设计实战
  • Day4 9. 奇怪的信 -卡码网C++基础课
  • HoughLinesP 霍夫变换 C#x2B;#x2B; opencv 内存报错处理
  • Python - UV 为每个项目创建独立、干净的Python工作空间
  • 任务5-2 关联查询和子查询
  • 【计算机毕业设计案例】基于springboot+微信小程序的选修课管理系统的设计与实现“课程查询-在线选课-课表管理-成绩追踪”(程序+文档+讲解+定制)
  • AI如何帮助开发者防御DDoS攻击?
  • WSL2 多 GPU CUDA 初始化问题排查与解决指南
  • zzRAG 的检索优化:MMR 平衡相关性与多样性
  • day40复习日@浙大疏锦行
  • 雷达回波图光流法外推项目实战!
  • Frida-Labs0x3-0xB WP
  • MySQL架构长啥样?
  • Arbess从基础到实践(22) - 集成GitPuk+sourcefare+PostIn自动化部署
  • 2025 年最新客服机器人品牌有哪些,看这一篇就够了 - 品牌策略主理人
  • PC耐力板厂家推荐:聚碳酸酯专业制造 + 国际认证(技术实力) - 品牌排行榜
  • 测试中的认知偏差:如何识别与应对思维陷阱
  • OpenVoice V2实战指南:从零开始打造你的专属语音助手
  • ONNX预训练模型极速获取攻略:8大方案解决你的下载困扰
  • 2025年螺旋板式冷凝器生产厂家榜单推荐:可拆式螺旋板式换热器/钛螺旋板式换热器/不锈钢螺旋板式换热器生产厂家精选 - 品牌推荐官
  • 3分钟让你的Qt应用颜值翻倍:10款专业QSS模板免费使用指南
  • 温州建国医院正规专业吗?详情解读”温州建国医院什么样? - 速递信息
  • Blender插件完全指南:从入门到精通的必备工具清单 [特殊字符]
  • 企业利润翻倍的秘密:为什么你的对手都在搭建AI agent
  • 【计算机毕业设计案例】基于SpringBoot北京市公交管理系统的设计与实现基于JAVA的北京市公交管理系统(程序+文档+讲解+定制)
  • 快速生成应用:AI大模型与低代码的无缝融合之道
  • BasePopup:Android弹窗终极指南与高效解决方案
  • 打开PyCharm新建工程,合作博弈的数学工具箱哐当一声砸在桌面上。综合能源系统的利益分配问题像块硬骨头,咱们今天要用Shapley值的牙口啃碎它
  • 反爬虫监控