欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > 简单封装一个websocket构造函数

简单封装一个websocket构造函数

2025/2/25 23:26:48 来源:https://blog.csdn.net/to_prototy/article/details/145781068  浏览:    关键词:简单封装一个websocket构造函数

问题描述

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

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

页面调用

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

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

socket && socket.wsDestroy(); 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词