尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

websocket功能开发

websocket功能开发
📅 发布时间:2026/6/19 23:58:14

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) }

相关新闻

  • 分布式电源接入对配电网影响分析 关键词:分布式电源 配电网 评估 参考文档:《自写文档,联系我...
  • 突破功率密度瓶颈:SiC器件在通信电源中的应用与LLC变换器设计实战
  • Day4 9. 奇怪的信 -卡码网C++基础课

最新新闻

  • DeepTutor终极指南:打造您的个人AI学习助手
  • MC9S08SH32内存架构与安全机制:从寻址优化到Flash编程实战
  • 2026北京靠谱的上门回收字画公司推荐榜单 - 品牌排行榜
  • 重庆修补家具大理石/瓷砖/岩板/木门补漆推荐良匠千艺2026本地口碑榜 - 我叫一
  • 终极指南:用Parsec VDD免费扩展你的Windows虚拟显示器
  • 2026年新发布山东靠谱的罐罐酸奶加盟项目深度剖析:为何谷物全书罐罐酸奶成为市场焦点? - 品牌鉴赏官2026

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号