当前位置: 首页 > 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);  });

相关文章:

  • C语言-字符串逆序
  • 芯片设计—低功耗isolation cell
  • householder进行矩阵QR分解
  • Anaconda深度学习环境配置命令参考
  • 人工智能对我们的生活影响有多大
  • 【Spring】SpringBoot的扩展点之ApplicationContextInitializer
  • python-冒泡排序
  • Golang基础-面向对象篇
  • 1.2.1 C语言结构体初始化方法总结
  • Nginx 开源版安装
  • 下一代ETL工具:微服务架构的全新数据集成平台
  • stm32定时器输入捕获模式
  • 外部中断为什么会误触发?
  • 蓝桥杯每日一题2023.11.21
  • 基于Apache部署虚拟主机网站
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • classpath对获取配置文件的影响
  • ESLint简单操作
  • JS专题之继承
  • Python语法速览与机器学习开发环境搭建
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 当SetTimeout遇到了字符串
  • 基于遗传算法的优化问题求解
  • 前端自动化解决方案
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何优雅地使用 Sublime Text
  • 听说你叫Java(二)–Servlet请求
  • 微信小程序实战练习(仿五洲到家微信版)
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 小而合理的前端理论:rscss和rsjs
  • 新书推荐|Windows黑客编程技术详解
  • 与 ConTeXt MkIV 官方文档的接驳
  • AI算硅基生命吗,为什么?
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​学习一下,什么是预包装食品?​
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #pragma 指令
  • #微信小程序:微信小程序常见的配置传值
  • %@ page import=%的用法
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (windows2012共享文件夹和防火墙设置
  • (办公)springboot配置aop处理请求.
  • (分享)自己整理的一些简单awk实用语句
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十六)Flask之蓝图
  • (四)c52学习之旅-流水LED灯
  • (一)Dubbo快速入门、介绍、使用
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET MVC之AOP
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装