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

前端 webSocket 的使用

webSocket使用
在这里插入图片描述
注意要去监听websocket 对象事件,处理我们需要的数据
在这里插入图片描述
我是放在了最外层的index 内,监听编辑状态,去触发定义的方法。因为我这个项目是组件化开发,全部只有一个总编辑按钮,我只需监听是否触发了编辑即可。看自己的项目需求了。

   initWs () {this.topic = [...new Set(this.topic)].filter(v => v)this.worker = new Worker()this.worker.postMessage({ topic: this.topic, host: window.location.host })this.worker.addEventListener('message', ({ data }) => {console.log('message====>', data)for (const key in data) {window.$eventBus.$emit(key, data[key])}})this.$store.commit('setisPanel', true)},

一、概念
定义
WebSocket是html5提供的一种在单个TCP连接上进行双向通信的协议,解决了客户端和服务端之间的实时通信问题。浏览器和服务器只需完成一次握手,两者之间就可以创建一个持久性的TCP连接,此后服务器和客户端通过此TCP连接进行双向实时通信。

例子:现在需要根据用户不同的输入来获取后端不同的数据,http请求的方式就是每次用户输入我就发送一个http请求。然而websocket的解决是一次连接成功后,每次用户输入都会发送给后台,但是这个发送的数据却是一直处在已经连接的状态,并不是每次想http每一次都是一次新的连接。

优点
为了实现数据推送,一般所用的技术都是ajax轮询。轮询是在特定的时间间隔,由浏览器主动发起请求,将服务器的数据拉回来。轮询需要不断的向服务器发送请求,会占用很多带宽和服务器资源。WebSocket建立TCP连接后,服务器可以主动给客户端传递数据,能够更好的节省服务器资源和带宽,实现更实时的数据通讯。

借鉴一张图
在这里插入图片描述

用法

// 申请一个WebSocket对象,
// 参数是服务端地址,
// 同http协议使用http://开头一样,WebSocket协议的url使用ws://开头,另外安全的WebSocket协议使用wss://开头var wsUrl = "ws://192.168.00.01:8888/xxx/xxxx";const ws = new WebSocket(wsUrl); ws.onopen = function(){//当WebSocket创建成功时,触发onopen事件console.log("open");ws.send("hello"); //将消息发送到服务端}ws.onmessage = function(e){//当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据console.log(e.data);}ws.onclose = function(e){//当客户端收到服务端发送的关闭连接请求时,触发onclose事件console.log("close");}ws.onerror = function(e){//如果出现连接、处理、接收、发送数据失败的时候触发onerror事件console.log(error);}

结合上述用法可以自行封装(不一定适用你的项目,不过大致逻辑就是这样)

export default class socketIO {constructor (topic, url, callback) {this.socketTask = nullthis.isOpen = false // 避免重复连接this.url = process.env.NODE_ENV === 'development' ? '172.16.66.229:8958' : urlthis.topic = topic // 订阅的测点this.connectNum = 1 // 重连次数// 心跳检测this.timeout = 1000 * 10 // 多少秒发送心跳this.heartbeatInterval = nullthis.reconnectTimeOut = nullthis.callback = callbackthis.init()}// 进入这个页面的时候创建websocket连接【整个页面随时使用】init () {const ws = this.url.includes('https') ? 'wss': 'ws'this.socketTask = new WebSocket(`${ws}://${this.url}/control/converter/api/v1/ws/connect?wsDataGroupId=real_customize`)if (!this.socketTask) {return}this.socketTask.onopen = () => {this.connectNum = 1console.log('WebSocket连接成功!')clearInterval(this.reconnectTimeOut)clearInterval(this.heartbeatInterval)this.isOpen = truethis.start()this.socketTask.onmessage = (e) => {setTimeout(() => {// 字符串转jsonlet res = JSON.parse(e.data)// console.log('message---------->', res)for (let i = 0; i < res.length; i++) {if (res[i].dataType !== 'heartbeat') {this.callback(res[i])}}}, 0)}}this.socketTask.onerror = (res) => {console.log('WebSocket连接打开失败,请检查!')this.socketTask = nullthis.isOpen = falseclearInterval(this.heartbeatInterval)clearInterval(this.reconnectTimeOut)if (this.connectNum < 6) {console.error(`WebSocket连接失败,正尝试第${this.connectNum}次连接`)this.reconnect()this.connectNum += 1}}this.socketTask.onclose = () => {console.log('已经被关闭了-------')clearInterval(this.heartbeatInterval)clearInterval(this.reconnectTimeOut)this.isOpen = falsethis.socketTask = null}}// 主动关闭socket连接close () {if (!this.isOpen) {return}this.socketTask && this.socketTask.close()}// 发送消息send (data) {console.log('send---------->', data)// 注:只有连接正常打开中 ,才能正常成功发送消息if (this.socketTask) {this.socketTask.send(JSON.stringify(data))}}// 开启心跳检测start () {// 测点监听this.send({dataType: 'monitoring_points_new',data: this.topic})// 心跳检测this.heartbeatInterval = setInterval(() => {this.send({dataType: 'heartbeat',data: `${new Date().getTime()}`})}, this.timeout)}// 重新连接reconnect () {// 停止发送心跳clearInterval(this.heartbeatInterval)// 如果不是人为关闭的话,进行重连if (!this.isOpen) {this.reconnectTimeOut = setInterval(() => {console.log('开始重连----------')if (this.isOpen) {clearInterval(this.reconnectTimeOut)} else {this.init()}}, 5000)}}
}

相关文章:

前端 webSocket 的使用

webSocket使用 注意要去监听websocket 对象事件&#xff0c;处理我们需要的数据 我是放在了最外层的index 内&#xff0c;监听编辑状态&#xff0c;去触发定义的方法。因为我这个项目是组件化开发&#xff0c;全部只有一个总编辑按钮&#xff0c;我只需监听是否触发了编辑即可…...

opencv图像处理(一)

一. OpenCV 简介 OpenCV 是一个跨平台计算机视觉库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 应用领域 1、人机互动 2、物体识别 3、图像分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、…...

消息队列-RabbitMQ:workQueues—工作队列、消息应答机制、RabbitMQ 持久化、不公平分发(能者多劳)

4、Work Queues Work Queues— 工作队列 (又称任务队列) 的主要思想是避免立即执行资源密集型任务&#xff0c;而不得不等待它完成。我们把任务封装为消息并将其发送到队列&#xff0c;在后台运行的工作进程将弹出任务并最终执行作业。当有多个工作线程时&#xff0c;这些工作…...

前端秘法基础式(HTML)(第二卷)

目录 一.表单标签 1.表单域 2.表单控件 2.1input标签 2.2label/select/textarea标签 2.3无语义标签 三.特殊字符 一.表单标签 用来完成与用户的交互,例如登录系统 1.表单域 <form>通过action属性,将用户填写的数据转交给服务器 2.表单控件 2.1input标签 type…...

PTA-统计英文字母和数字字符[2]

本题要求编写程序&#xff0c;输入N个字符&#xff0c;统计其中英文字母、数字字符和其他字符的个数。 输入格式: 输入在第一行中给出正整数N&#xff0c;第二行输入N个字符&#xff0c;最后一个回车表示输入结束&#xff0c;不算在内。 输出格式: 在一行内按照 letter 英…...

Elasticsearch:将 IT 智能和业务 KPI 与 AI 连接起来 - 房间里的大象

作者&#xff1a;Fermi Fang 大象寓言的智慧 在信息技术和商业领导力的交叉点&#xff0c;蒙眼人和大象的古老寓言提供了一个富有洞察力的类比。 这个故事起源于印度次大陆&#xff0c;讲述了六个蒙住眼睛的人第一次遇到大象的故事。 每个人触摸大象的不同部位 —— 侧面、象牙…...

基于芯驰 X9HP PTG4.1 在 yocto 中添加 Linux 应用

1.参考例程并添加应用 1.1 参考例程 &#xff08;1&#xff09;查看自带的串口测试例程 uart_test &#xff0c;查看 bb 文件怎么写的。 1.2 添加 printf-test 应用 &#xff08;1&#xff09;在 yocto/meta-semidrive/recipes-bsp/ 目录中 copy 自带例程 uart-test 改名为 …...

【微服务安全】OpenID Connect 简介:现代应用程序的身份验证

OpenID Connect (OIDC) 是一个建立在 OAuth 2.0 之上的开放身份验证协议。它简化了应用程序以一种标准化和可互操作的方式验证用户身份并获取其基本个人资料信息的方式。可以将其视为应用程序“知道你是谁”的一种安全方式&#xff0c;而无需你创建单独的帐户或透露你的密码。 …...

Linux系统中HTTP隧道的搭建与配置步骤:穿越网络的“魔法隧道”

在Linux系统中搭建HTTP隧道&#xff0c;就像是开启了一条穿越网络的“魔法隧道”。这条隧道能让你的数据在网络中自由穿梭&#xff0c;无论是远程办公还是数据同步&#xff0c;都能变得轻松自在。下面&#xff0c;就让我们一起探索如何搭建这条神奇的“魔法隧道”吧&#xff01…...

fastApi笔记04-查询参数和字符串校验

额外校验 使用Query可以对查询参数添加校验 from typing import Unionfrom fastapi import FastAPI, Queryapp FastAPI()app.get("/items/") async def read_items(q: Union[str, None] Query(defaultNone, max_length50)):results {"items": [{"…...

笔记 记录

前言 个人记录 官网模版 基于 vue2 示例图...

相机图像质量研究(38)常见问题总结:编解码对成像的影响--呼吸效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

MQTT协议-ISO标准下基于发布/订阅范式的消息协议

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上&#xff0c;是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议&#xff0c;为此&#xff0c;它需要一个消息中间件 。 MQTT是一个…...

手动实现new操作符

<script>//前置知识// 每一个函数在创建之初就会有一个prototype属性&#xff0c;这个属性指向函数的原型对象// function abc(){// }// abc.prototype--> {constructor: f}// 在JS中任意的对象都有内置的属性叫做[[prototype]]这是一个私有属性&#xff0c;这个私有属…...

【flutter】环境安装

安装flutter sdk 下载sdk flutter sdk就包含dart&#xff0c;所以我们只用安装flutter sdk就可以了。 我们去清华大学开源软件镜像站下载&#xff0c;flutter开发中&#xff0c;版本对不上基本项目就跑步起来&#xff0c;如果是团队协同开发的话&#xff0c;建议统一下载指定版…...

ROUGE-L和SPICE

ROUGE-L ROUGE-L&#xff08;Recall-Oriented Understudy for Gisting Evaluation - Longest Common Subsequence&#xff09;是一种用于评估自动文本摘要或机器翻译等自然语言处理任务的评价指标。它基于最长公共子序列&#xff08;LCS&#xff09;来计算&#xff0c;主要关注…...

vue3组件通信方式汇总

前言&#xff1a;本文默认读者有JS基础和Vue基础&#xff0c;如果没有这个两个基础&#xff0c;可能阅读比较困难&#xff0c;建议先看下官方文档&#xff0c;当然&#xff0c;也欢迎评论交流&#x1f601; 通信方式总结 常见搭配形式 一、props&#xff08;使用频率最高&#…...

备份服务器数据的重要

备份服务器数据的重要 无论您是在运营一个网站、一个业务应用程序还是整个平台&#xff0c;无法定期备份服务器数据都可能将会再次困扰您。这不是一个是否的问题。这是个何时的问题。你们需要将灾难性故障的潜在损害降至最低。 灾难性故障期间最大限度地减少潜在损害的最佳方法…...

基于shp数据制作3DTiles建筑白膜

经纬管网建模系统MagicPipe3D&#xff0c;本地离线参数化构建地下管网、建筑三维模型&#xff0c;输出标准3DTiles服务、Obj模型等格式&#xff0c;支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析。欢迎下载试用&#xff1a;http://www.magic3d.…...

SpringBootWeb学习笔记——12万字详细总结!

0. 写在前面 注:这套笔记是根据黑马程序员B站2023-3-21的视频学习的成果,其中省略了前端基础部分、Maven部分和数据库基础部分,详情可见目录。 注注:目前文章内结尾处多幅图片加载不出来,因为图片还存在本地没被传上来,过段时间再改~ 所有的Spring项目都基于Spring Fra…...

Unity ScriptableObject+序列化多态构建模块化特效系统

1. 这不是“换个写法”&#xff0c;而是重构整个效果系统的底层逻辑在Unity项目做到中后期&#xff0c;你大概率会遇到这样一个场景&#xff1a;美术同学提来第17个新粒子特效需求&#xff0c;策划说“和之前那个爆炸效果差不多&#xff0c;但要加个拖尾音效屏幕震动”&#xf…...

Makefile中FORCE伪目标的原理与应用:实现强制构建与版本信息生成

1. 项目概述与FORCE的引入在嵌入式开发&#xff0c;尤其是像RT-Thread这类复杂操作系统的构建过程中&#xff0c;Makefile是绕不开的核心工具。它不仅仅是编译指令的集合&#xff0c;更是整个项目构建逻辑的蓝图。很多工程师&#xff0c;特别是从IDE环境转过来的朋友&#xff0…...

【Coze工作流】零代码做AI自动化,小白也能5分钟上手

一、问题背景&#xff1a;手工做重复AI任务太累&#xff0c;想自动化但不会写代码在日常办公或者内容创作中&#xff0c;很多人都有过这样的痛点&#xff1a;每天要重复打开各种AI工具。比如你要写一篇爆款文章&#xff0c;先要找AI找选题&#xff0c;再让AI写大纲&#xff0c;…...

如何利用 AI Agent 优化日常办公自动化流程?

用 AI Agent 优化办公自动化&#xff0c;核心是把高频重复、规则清晰、跨系统搬运的工作交给 Agent&#xff0c;人专注决策与创意&#xff1b;先试点、再打通数据、最后规模化&#xff0c;通常能把事务性时间压减 50%–80%。下面从落地框架、核心场景、搭建步骤、工具选型与避坑…...

Spring Cache + Redis 缓存套餐数据,我是这样在Spring Boot项目里省掉80%数据库查询的

Spring Cache Redis 实战&#xff1a;如何用缓存套餐数据减少80%数据库查询 在电商和外卖系统中&#xff0c;套餐数据往往是高频查询但低频变更的典型场景。想象一下&#xff0c;每当用户浏览餐厅页面时&#xff0c;系统都要反复查询数据库获取相同的套餐信息&#xff0c;这种…...

破解Windows安装程序本地化难题:Inno Setup简体中文翻译的技术实现与架构设计

破解Windows安装程序本地化难题&#xff1a;Inno Setup简体中文翻译的技术实现与架构设计 【免费下载链接】Inno-Setup-Chinese-Simplified-Translation :earth_asia: Inno Setup Chinese Simplified Translation 项目地址: https://gitcode.com/gh_mirrors/in/Inno-Setup-Ch…...

深入理解Istio架构:控制平面与数据平面核心组件全解析

深入理解Istio架构&#xff1a;控制平面与数据平面核心组件全解析 【免费下载链接】istio-handbook Istio服务网格进阶实战 项目地址: https://gitcode.com/gh_mirrors/is/istio-handbook Istio作为新一代服务网格&#xff08;Service Mesh&#xff09;的领航者&#xf…...

AltStore技术深度解析:非越狱iOS侧载方案实战指南

AltStore技术深度解析&#xff1a;非越狱iOS侧载方案实战指南 【免费下载链接】AltStore AltStore is an alternative app store for non-jailbroken iOS devices. 项目地址: https://gitcode.com/gh_mirrors/al/AltStore 在iOS生态系统中&#xff0c;应用分发一直受到A…...

seaborn实践

本文章基于豆包整理了使用seaborn生成若干典型图表的示例代码&#xff0c;可供学习seaborn使用。一、图表结果预览二、测试数据生成生成了两组数据&#xff0c;一组是银行贷款存款数据&#xff0c;一组是学生成绩数据&#xff0c;生成数据代码如下&#xff1a;-- 1. 创建数据库…...

线上故障排查与应急响应实战:从零开始建立你的SRE体系

线上故障排查与应急响应实战&#xff1a;从零开始建立你的SRE体系 大家好&#xff0c;我是迪哥。2024 年我们的线上故障平均恢复时间&#xff08;MTTR&#xff09;是 45 分钟&#xff0c;2025 年降到了 10 分钟&#xff0c;怎么做到的&#xff1f;靠的是完善的应急响应机制和故…...