websocket封装过程是什么?
Admin 2021-10-20 群英技术资讯 1342 次浏览
今天我们来了解websocket封装的内容,下文给大家分享了websocket封装过程,及引入和使用,需要的朋友可以参考,下面我们一起来学习一下吧。
在一个应用中,websocket一般都是以单例形式存在的,即在整个应用中,websocket实例始终保持唯一。但有时我们要用到websocket实例的时候,可能websocket还没实例化,所以要做成异步的形式来获取实例。
一、封装。先创建 socket.ts 文件
import EventEmitter from 'events'; // 这里用到了 events 包 const ee = new EventEmitter(); class Ws { private wsUrl: string = ''; private socket: WebSocket | undefined; // socket实例 private lockReconnect: boolean = false; // 重连锁 private timeout: NodeJS.Timeout | undefined; // 初始化socket,一般在应用启动时初始化一次就好了,或者需要更换wsUrl public init(wsUrl: string) { this.wsUrl = wsUrl; this.createWebSocket(); } // 获取socket实例 public getInstance(): Promise<WebSocket> { return new Promise((resolve, reject) => { if (this.socket) { resolve(this.socket); } else { ee.on('socket', (state: string) => { if (state === 'success') { resolve(this.socket); } else { reject(); } }); } }); } // 创建socket private createWebSocket() { try { console.log('websocket 开始链接'); const socket = new WebSocket(this.wsUrl); socket.addEventListener('close', () => { console.log('websocket 链接关闭'); this.socket = undefined; this.reconnect(); }); socket.addEventListener('error', () => { console.log('websocket 发生异常了'); this.socket = undefined; this.reconnect(); }); socket.addEventListener('open', () => { // 可在此进行心跳检测 // this.heartCheck.start(); console.log('websocket open'); this.socket = socket; ee.emit('socket', 'success'); }); socket.addEventListener('message', (event) => { console.log('websocket 接收到消息', event); }); } catch (e) { console.log('socket catch error', e); this.reconnect(); } } // 重连 private reconnect() { if (this.lockReconnect) { return; } console.log('websocket 正在重新连接'); this.lockReconnect = true; //没连接上会一直重连,设置延迟避免请求过多 this.timeout && clearTimeout(this.timeout); this.timeout = setTimeout(() => { this.createWebSocket(); this.lockReconnect = false; }, 5000); } } export default new Ws();
二、引入并使用
import socket from '@/utils/ws'; socket .getInstance() .then((ws) => { // 这里的 ws 就是实例化后的 websocket,可以直接使用 websocket 原生 api console.log('getInstance ws', ws); ws.addEventListener('message', (event) => { console.log('ws 接收到消息', event); }); }) .catch(() => {});
以上就是关于websocket封装过程的介绍啦,本文代码有一定的借鉴价值,有需要的朋友可以参考,希望对大家学习websocket封装有帮助,想要了解更多可以继续浏览群英网络其他相关的文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要为大家介绍了vue之mixin的使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
测试代码是确保代码稳定的第一步。能做到这一点的最佳方法之一就是使用单元测试。这篇文章主要介绍了如何用JavaScript编写你的第一个单元测试,感兴趣的可以了解一下
这篇文章主要为大家介绍了JS中switch的四种写法示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
这篇文章主要为大家详细介绍了javaScript实现放大镜特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Axios 毋庸多说大家在前端开发中常用的一个发送 HTTP 请求的库,用过的都知道,篇文章主要给大家介绍了关于vue中如何简单封装axios的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008