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

webSocket基于面向对象二次封装

今天不睡,熬夜赶了个WebSocket 二次封装,也对这几天文章摸鱼感到抱歉,所以我出了一个注释非常非常全的代码

思路如下
首先,需要通过调用connect方法来建立WebSocket连接。当连接成功时,会调用我提供的回调函数,并将连接成功的消息帧作为参数传递给它。在回调函数中,我们可以打印消息帧到控制台中。如果连接失败,则会执行catch回调函数,并打印错误信息到控制台中。

一旦连接成功,可以继续执行订阅主题的操作。通过调用subscribe方法,可以订阅一个特定的主题。当接收到消息时,会调用提供的回调函数,并将解析后的数据作为参数传递给它。在回调函数中,可以打印收到的数据到控制台中。如果订阅失败,则会执行catch回调函数,并打印错误信息到控制台中。

看在这么全的份上,请点个赞,不懂得可以问博主,看到会回

// 定义一个名为WebSocketClient的类  
class WebSocketClient {  // 构造函数,接收一个url作为参数,用于初始化WebSocketClient对象  constructor(url: string) {  // 将传入的url赋值给this.url,保存url的信息  this.url = url;  // 初始化socket属性为null,表示尚未建立WebSocket连接  this.socket = null;  // 初始化stompClient属性为null,表示尚未建立Stomp客户端连接  this.stompClient = null;  }  // 定义一个名为connect的方法,用于建立WebSocket连接并返回Promise对象  connect() {  // 返回一个新的Promise对象,Promise的参数是一个函数,该函数接收resolve和reject两个参数  return new Promise<void, Error>((resolve, reject) => {  try {  // 创建一个新的SockJS实例,使用this.url作为参数,尝试建立WebSocket连接  this.socket = new SockJS(this.url);  // 使用已建立的WebSocket连接创建一个Stomp客户端,stompClient属性保存这个客户端的引用  this.stompClient = Stomp.over(this.socket);  // 设置stompClient的debug属性为null,关闭日志输出    this.stompClient.debug = null; // 关闭日志      // 使用stompClient的connect方法进行连接,传入空回调函数和错误回调函数  this.stompClient.connect({}, (frame: { [key: string]: any }) => { // 当连接成功时,回调空回调函数,并将连接成功的消息帧传递给resolve参数  resolve(frame);  }, function (error) {  // 当连接失败时,回调错误回调函数,并将错误信息传递给reject参数  reject(error);  });  } catch (error) {  // 如果在尝试建立WebSocket连接或Stomp客户端的过程中抛出错误,将错误信息传递给reject参数  reject(error);  }  });  }  // 定义一个名为subscribe的方法,用于在已建立的连接上订阅主题并返回Promise对象  subscribe(topic: string) {  // 返回一个新的Promise对象,Promise的参数是一个函数,该函数接收resolve和reject两个参数  return new Promise<any, Error>((resolve, reject) => {  try {  // 使用已建立的stompClient和给定的主题进行订阅,传入一个回调函数和错误回调函数  this.stompClient.subscribe(topic, (data: any) => {  // 当接收到消息时,回调回调函数,并解析消息体为JSON格式的数据,然后打印到控制台中  var dataGm = JSON.parse(data.body);  console.log('数据', dataGm);  // 将解析后的数据传递给resolve参数,表示订阅成功完成  resolve(dataGm);  });  } catch (error) {  // 如果在尝试订阅主题的过程中抛出错误,将错误信息传递给reject参数  reject(error);  }  });  }  
}  

调用就像下面这样调用就好了

	// 使用示例:    let socketUrl: string = "http://192.168.1.38:8080/gs-guide-websocket";  let client: WebSocketClient = new WebSocketClient(socketUrl);  client.connect().then((frame: { [key: string]: any }) => {  console.log('连接成功', frame);  }).catch((error: Error) => {  console.error('连接失败', error);  });  client.subscribe('/topic').then((dataGm: any) => {  console.log('订阅成功', dataGm);  }).catch((error: Error) => {  console.error('订阅失败', error);  });

相关文章:

webSocket基于面向对象二次封装

今天不睡,熬夜赶了个WebSocket 二次封装,也对这几天文章摸鱼感到抱歉,所以我出了一个注释非常非常全的代码 思路如下 首先&#xff0c;需要通过调用connect方法来建立WebSocket连接。当连接成功时&#xff0c;会调用我提供的回调函数&#xff0c;并将连接成功的消息帧作为参数…...

【Web】PHP反序列化的一些trick

目录 ①__wakeup绕过 ②加号绕过正则匹配 ③引用绕过相等 ④16进制绕过关键词过滤 ⑤Exception绕过 ⑥字符串逃逸 要中期考试乐(悲) ①__wakeup绕过 反序列化字符串中表示属性数量的值 大于 大括号内实际属性的数量时&#xff0c;wakeup方法会被绕过 &#xff08;php5-p…...

【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS

压力测试&#xff0c;我们针对比较关键的接口&#xff0c;可以进行相应的压力测试&#xff0c;主要还是测试看看接口能抗住多少的请求数&#xff0c;TPS稳定在多少&#xff0c;也就是吞吐量多少 安装 Jmeter的安装很简单&#xff0c;官网下载地址 http://jmeter.apache.org/ &…...

代码随想录算法训练营第四十九天| 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 123.买卖股票的最佳时机III class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices) 0:return 0dp [[0] * 5 for _ in…...

11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)

一、 choices参数的使用 1.1 作用 针对某个可以列举完全的可能性字段&#xff0c;我们应该如何存储 .只要某个字段的可能性是可以列举完全的&#xff0c;那么一般情况下都会采用choices参数 1.2 应用场景 应用场景&#xff1a; 学历&#xff1a; 小学 初中 高中 本科 硕士…...

深度学习二维码识别 计算机竞赛

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天…...

C#关于TimeSpan结构的使用和获取两个时间差

C#中的TimeSpan结构可以获取两个时间的时间差。 它主要具有以下属性和方法&#xff1a; 属性&#xff1a; Days&#xff1a;获取时间间隔的天数部分。Hours&#xff1a;获取时间间隔的小时数部分&#xff08;不包括整天的小时数&#xff09;。Minutes&#xff1a;获取时间间…...

Git分支管理

愿所有美好如期而遇 目录 理解分支 创建分支 切换分支 合并分支 删除分支 合并冲突 分支管理策略 理解分支 每次提交master都会前进一步&#xff0c;随着不断提交&#xff0c;master分支的线越来越长&#xff0c;而HEAD指向哪条分支就是当前工作的分支。 master分支是我…...

《视觉SLAM十四讲》-- 建图

11 建图 11.1 概述 &#xff08;1&#xff09;地图的几类用处&#xff1a; 定位&#xff1a;导航&#xff1a;机器人在地图中进行路径规划&#xff1b;避障重建交互&#xff1a;人与地图之间的互动 &#xff08;2&#xff09;几类地图 稀疏地图稠密地图语义地图 11.2 单目…...

智能配电箱柜管理系统

智能配电箱柜管理系统是一个综合性的管理系统&#xff0c;专门设计用于监控和控制智能配电箱和柜的运行。这个系统集成了先进的技术和智能化功能&#xff0c;以确保配电系统的正常运行并提高其效率。依托电易云-智慧电力物联网&#xff0c;以下是智能配电箱柜管理系统的主要特点…...

聊聊近些年 CPU 在微架构、IO 速率上的演进过程

大家好&#xff0c;我是飞哥&#xff01; 在上一篇《深入了解 CPU 的型号、代际架构与微架构》 中我们介绍了我手头的一颗 Intel(R) Core(TM) i5 的型号规则&#xff0c;以及它的物理硬件的 Die 图结构。以及它对应的 Skylake 核的微架构实现。 不少同学开始问我其它型号的 CPU…...

PS学习笔记——移动工具

文章目录 介绍文档内移动文档间移动 介绍 移动工具&#xff1a;用于移动图层中的对象&#xff0c;并且同一图层中的所有对象都将一起移动 选中移动工具后&#xff0c;选项栏中会出现“显示变换控件”&#xff0c;勾选后即可看见图层中的对象周围出现边框&#xff0c;可以进行缩…...

信息中心网络提出的背景、研究现状及研究内容

信息中心网络什么时候提出的&#xff1f;未来发展前景&#xff1f;有什么著名实验室在做&#xff1f; 1、提出背景&#xff1a; 互联网产生于上世纪60年代&#xff1a; &#xff08;1&#xff09;网络设备数量呈指数性增长 截至2022年底全球范围内预计将有超过280亿台终端设…...

【计算机视觉】24-Object Detection

文章目录 24-Object Detection1. Introduction2. Methods2.1 Sliding Window2.2 R-CNN: Region-Based CNN2.3 Fast R-CNN2.4 Faster R-CNN: Learnable Region Proposals2.5 Results of objects detection 3. SummaryReference 24-Object Detection 1. Introduction Task Defin…...

【mac 解决eclipse意外退出】

打开eclipse时提示报错信息应用程序"Eclipse.app"无法打开&#xff08;这里忘了截图就不上图了&#xff09;。 点击 “好” 的按钮后会弹出发送报告的弹窗 终端输入&#xff1a;sudo codesign --force --deep --sign - /Applications/Eclipse.app/ 就可以解决了...

mysql innodb buffer pool缓冲池命中率和命中了哪些表?—— 筑梦之路

环境说明 mysql 5.7及以上 公式 # InnoDB缓冲区缓存的命中率计算公式100 * (1 - (innodb_buffer_pool_reads/innodb_buffer_pool_read_requests ))注意: 对于具有大型缓冲池的系统&#xff0c;既要关注该比率&#xff0c;也要关注OS页面读写速率的变化可以更好地跟踪差异。s…...

牛掰的dd命令,cpi0配合find备份(不会主动备份),od查看

dd if设备1或文件 of设备2或文件 blocknsize countn 还原就是把设备1,2调过来 这里想到dump的还原是命令restore&#xff0c;想起来就写一下&#xff0c;省的总忘记 可以针对整块磁盘进行复制&#xff0c;对于新创建的分区&#xff0c;也不用格式化&#xff0c;可以直接…...

pip list 和 conda list的区别

PS : 网上说conda activate了之后就可以随意pip了 可以conda和pip混用 但是安全起见还是尽量用pip 这样就算activate了&#xff0c;进入base虚拟环境了 conda与pip的区别 来源 Conda和pip通常被认为几乎完全相同。虽然这两个工具的某些功能重叠&#xff0c;但它们设计用于不…...

多目标应用:基于多目标灰狼优化算法MOGWO求解微电网多目标优化调度(MATLAB代码)

一、微网系统运行优化模型 微电网优化模型介绍&#xff1a; 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、多目标灰狼优化算法MOGWO 多目标灰狼优化算法MOGWO简介&#xff1a; 三、多目标灰狼优化算法MOGWO求解微电网多目标优化调度 &#xff08;1&#xff09…...

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字

上一节实现了 LangChain 实现给动物取名字&#xff0c; 实际上每次给不同的动物取名字&#xff0c;还得修改源代码&#xff0c;这周就用模块化template来实现。 1. 添加promptTemplate from langchain.llms import OpenAI # 导入Langchain库中的OpenAI模块 from langchain.p…...

linux nas

挂载到本地 mkdir -p /mnt/mountnasdir mount -t nfs 192.168.62:/cnas_id10086_vol10010_dev/ /mnt/mountnasdir...

控制您的音乐、视频等媒体内容

跨多个 Chrome 标签页播放音乐或声音 在计算机上打开 Chrome 。在标签页中播放音乐、视频或其他任何有声内容。您可以停留在该标签页上&#xff0c;也可以转到别处。要控制声音&#xff0c;请在右上角点击“媒体控件”图标 。您可暂停播放、转到下一首歌曲/下一个视频&#xf…...

xlua源码分析(三)C#访问lua的映射

xlua源码分析&#xff08;三&#xff09;C#访问lua的映射 上一节我们主要分析了lua call C#的无wrap实现。同时我们在第一节里提到过&#xff0c;C#使用LuaTable类持有lua层的table&#xff0c;以及使用Action委托持有lua层的function。而在xlua的官方文档中&#xff0c;推荐使…...

2023 极术通讯-汽车“新四化”路上,需要一片安全山海

导读&#xff1a;极术社区推出极术通讯&#xff0c;引入行业媒体和技术社区、咨询机构优质内容&#xff0c;定期分享产业技术趋势与市场应用热点。 芯方向 【Armv9】-动态TrustZone技术的介绍 动态 TrustZone 是提供多租户安全媒体 pipeline 的绝佳工具。完全不受操作系统、虚…...

Spring Boot接口设计规范

接口参数处理及统一结果响应 1、接口参数处理 1、普通参数接收 这种参数接收方式是比较常见的&#xff0c;由于是GET请求方式&#xff0c;所以在传参时直接在路径后拼接参数和参数值即可。 例如&#xff1a;localhost:8080/api/product/list?key1value1&key2value2 /…...

美创科技与南京大数据安全技术有限公司达成战略合作

近日&#xff0c;美创科技与南京大数据安全技术有限公司正式签署战略合作协议&#xff0c;优势力量共享、共拓共创共赢。 美创科技CEO柳遵梁、副总裁罗亮亮、副总裁王利强&#xff0c;南京大数据安全技术有限公司总经理潘杰、市场总监刘莉莎、销售总监王皓月、技术总监薛松等出…...

2.4路由日志管理

2.4路由/日志管理 一、静态路由和动态路由 路由器在转发数据时&#xff0c;需要现在路由表中查找相应的路由&#xff0c;有三种途径 &#xff08;1&#xff09;直连路由&#xff1a;路由器自动添加和自己直连的路由 &#xff08;2&#xff09;静态路由&#xff1a;管理员手动…...

归并排序详解:递归实现+非递归实现(图文详解+代码)

文章目录 归并排序1.递归实现2.非递归实现3.海量数据的排序问题 归并排序 时间复杂度&#xff1a;O ( N * logzN ) 每一层都是N,有log2N层空间复杂度&#xff1a;O&#xff08;N&#xff09;&#xff0c;每个区间都会申请内存&#xff0c;最后申请的数组大小和array大小相同稳定…...

DataBinding原理

1、MainActivity首先使用DataBindingUtil.setContentView设置布局文件activity_main.xml。 2、随后&#xff0c;经过一系列函数调用&#xff0c;ActivityMainBindingImpl对象最终会实例化&#xff0c;并与activity_main.xml进行绑定。 3、实例化后的ActivityMainBindingImpl对象…...

docker更换国内源

docker更换国内源 1、编辑Docker配置文件 在终端中执行以下命令&#xff0c;编辑Docker配置文件&#xff1a; vi /etc/docker/daemon.json2、添加更新源 在打开的配置文件中&#xff0c;添加以下内容&#xff1a; {"registry-mirrors": ["https://hub-mirror…...