简单封装一个websocket构造函数

server/2025/2/25 15:42:09/

问题描述

最近维护一个老项目,发现项目中有大量重复代码,特别是websocket的调用这一块,同样的代码复制了十几个页面,于是自己封装了一个websocket调用的构造函数。

javascript">export default class CreateWebSocket {constructor(url) {// ws地址this.url = url;// 定义ws对象this.ws = null;// ws定时器this.wsTimer = null;this.onDataReceived = null;this.wsInit();}// 初始化wswsInit = () => {// 销毁wsthis.wsDestroy();// 初始化wsthis.ws = new WebSocket(this.url);// ws连接建立时触发this.ws.addEventListener("open", this.wsOpenHanler);// ws服务端给客户端推送消息this.ws.addEventListener("message", this.wsMessageHanler);// ws通信发生错误时触发this.ws.addEventListener("error", this.wsErrorHanler);// ws关闭时触发this.ws.addEventListener("close", this.wsCloseHanler);};wsOpenHanler = (event) => {console.log("ws建立连接成功");};wsMessageHanler = (e) => {console.log("接收数据", e);//方法1// var event = new CustomEvent("onMessage", { detail: e });// this.ws.dispatchEvent(event);//方法2this.onDataReceived && this.onDataReceived(e);};getData = (callback) => {this.onDataReceived = callback;};//断开重连reconnect = () => {this.wsTimer && clearTimeout(this.wsTimer);this.wsTimer = setTimeout(() => {this.wsInit();}, 5000);};wsErrorHanler = (event) => {console.log(event, "通信发生错误");this.reconnect();};wsCloseHanler = (event) => {console.log(event, "ws连接关闭");this.reconnect();};wsDestroy = () => {if (this.MyWebSocket !== null) {this.ws.removeEventListener("open", this.wsOpenHanler);this.ws.removeEventListener("message", this.wsMessageHanler);this.ws.removeEventListener("error", this.wsErrorHanler);this.ws.removeEventListener("close", this.wsCloseHanler);this.ws.close();this.ws = null;this.wsTimer && clearTimeout(this.wsTimer);}};
}

页面调用

javascript">const socket = new Create('ws://190.201.8.203:80');
//方法一
socket.ws.addEventListener('onMessage', (event) => {//此处写接收到数据后的处理逻辑            
})
//方法二
socket.getData(data=>{//此处写接收到数据后的处理逻辑
})

注意
离开页面一定要卸载ws

javascript">socket && socket.wsDestroy(); 

http://www.ppmy.cn/server/170575.html

相关文章

图解循环神经网络(RNN)

目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同&#xff0c…

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解

【Linux系统】—— 冯诺依曼体系结构与操作系统初理解 1 冯诺依曼体系结构1.1 基本概念理解1.2 CPU只和内存打交道1.3 为什么冯诺依曼是这种结构1.4 理解数据流动 2 操作系统2.1 什么是操作系统2.2 设计OS的目的2.3 操作系统小知识点2.4 如何理解"管理"2.5 系统调用和…

Bash Shell控制台终端命令合集

最近整理了一下Bash Shell终端的命令,以备后续查用。如下: 1.内建命令 命令描述&在后台启动作业((x))执行数学表达式x.在当前shell中读取并执行指定文件中的命令:什么都不做,始终成功退出[ t ]对条件表达式t进行求值[[ e ]]对条件表达式e进行求值alias为指定的命令定义…

【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,

欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创&#x1…

【漫话机器学习系列】104.机器学习中的“学习”是什么?(Learning In Machine Learning)

1. 引言 在人工智能(AI)和机器学习(Machine Learning,ML)领域,我们常听到“机器学习”这个术语,但“学习”究竟意味着什么?机器如何学习?它的学习过程与人类的学习有何异…

springboot使用logback自定义日志

前言 1、末尾有完整配置文件 2、日志分为五个等级&#xff0c;按照优先级的高低可以分为&#xff1a; TRANCE < DEBUG < INFO < WARN < ERRORspringboot默认是INFO&#xff0c;因此低于INFO的TRACE和DEBUG都不会输出。 可以在properties或yaml配置文件中修改日…

OpenCV 4.10.0 图像处理基础入门教程

一、OpenCV基础架构与开发环境 1.1 OpenCV核心模块解析 OpenCV 4.10.0延续了模块化架构设计&#xff0c;核心模块包含&#xff1a; Core&#xff1a;提供基础数据结构&#xff08;如Mat&#xff09;和基本运算Imgcodecs&#xff1a;独立图像编解码模块Videoio&#xff1a;视…

CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望

CentOS停服后的替代选择&#xff1a;openEuler、Rocky Linux及其他系统的未来展望 引言CentOS停服的背景华为openEuler&#xff1a;面向未来的开源操作系统1. 简介2. 特点3. 发展趋势 Rocky Linux&#xff1a;CentOS的精神继承者1. 简介2. 特点3. 发展趋势 其他可选的替代系统1…