websocket全局封装使用

ops/2024/11/8 16:39:45/

WebSocket对象的创建
WebSocket对象的关闭
启用心跳机制,避免断连
消息推送,接收到消息后进行业务逻辑处理
重连机制,如果断连后尝试一定次数的重连,超过最大次数后仍然失败则关闭连接
调用案例如下:
const socketManager = new WebSocketManager(‘ws://example.com/socket’, receiveMessage)
socketManager.start()

javascript">export default class WebSocketManager {constructor(url = null, receiveMessageCallback = null) {this.socket = null // WebSocket 对象this.pingTimeout = null // 心跳计时器this.reconnectTimeout = 5000 // 重连间隔,单位:毫秒this.maxReconnectAttempts = 10 // 最大重连尝试次数this.reconnectAttempts = 0; // 当前重连尝试次数this.url = url // WebSocket 连接地址this.receiveMessageCallback = receiveMessageCallback // 接收消息回调函数}/*** 初始化*/async start() {if (this.url) {// 连接WebSocketthis.connectWebSocket()} else {console.error('WebSocketManager erros: 请传入连接地址')}}/*** 创建WebSocket连接*/connectWebSocket() {// 创建 WebSocket 对象this.socket = new WebSocket(this.url)// 处理连接打开事件this.socket.addEventListener('open', event => {// 心跳机制this.startHeartbeat()})// 处理接收到消息事件this.socket.addEventListener('message', event => {this.receiveMessage(event)})// 处理连接关闭事件this.socket.addEventListener('close', event => {// 清除定时器clearTimeout(this.pingTimeout)clearTimeout(this.reconnectTimeout)// 尝试重连if (this.reconnectAttempts < this.maxReconnectAttempts) {this.reconnectAttempts++this.reconnectTimeout = setTimeout(() => {this.connectWebSocket()}, this.reconnectTimeout)} else {// 重置重连次数this.reconnectAttempts = 0console.error('已达到最大重新连接尝试次数。无法重新连接。')}})// 处理 WebSocket 错误事件this.socket.addEventListener('error', event => {console.error('WebSocketManager error:', event)})}/*** 启动心跳机制*/startHeartbeat() {this.pingTimeout = setInterval(() => {// 发送心跳消息this.sendMessage('ping')}, 10000) // 每隔 10 秒发送一次心跳}/*** 发送消息* @param {String} message 消息内容*/sendMessage(message) {if (this.socket.readyState === WebSocket.OPEN) {this.socket.send(message);} else {console.error('WebSocketManager error: WebSocket连接未打开,无法发送消息。')}}/*** 接收到消息*/receiveMessage(event) {// 根据业务自行处理console.log('receiveMessage:', event.data)// 传入回调函数自行处理this.receiveMessageCallback && receiveMessageCallback(event.data)}/*** 关闭连接*/closeWebSocket() {this.socket.close()// 清除定时器 重置重连次数clearTimeout(this.pingTimeout)clearTimeout(this.reconnectTimeout)this.reconnectAttempts = 0}
}

http://www.ppmy.cn/ops/24783.html

相关文章

源码编译framework.jar 并成功导入android studio 开发

一、不同安卓版本对应路径 Android N/O: 7 和 8 out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar Android P/Q: 9 和 10 out/soong/.intermediates/frameworks/base/framework/android_common/combined/framework.jar Android R: 11以上 out/so…

QT 开发COM(ActiveX)组件基础介绍和方案验证

一、COM简介 1.1 COM是什么&#xff1f; COM&#xff0c;Component Object Model&#xff0c;即组件对象模型&#xff0c;是一种以组件为发布单元的对象模型&#xff0c;这种模型使各软件组件可以用一种统一的方式进行交互。COM 既提供了组件之间进行交互的规范&#xff0c;也…

如何使用 Nginx 进行负载均衡

在这篇博客中&#xff0c;我们将详细介绍如何使用 Nginx 进行负载均衡。Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;它也经常被用作邮件代理服务器和通用 TCP/UDP 代理服务器。通过使用 Nginx 进行负载均衡&#xff0c;可以有效地分配客户端请求至多个服务器&…

如何在iPhone上恢复出厂设置后恢复数据

你不想让这种情况发生&#xff0c;但它确实发生了。您必须将iPhone恢复出厂设置。当您的 iPhone 上出现软件问题且无法修复时&#xff0c;可能会发生这种情况。相反&#xff0c;在更新期间&#xff0c;或者您的iPhone遇到问题时&#xff0c;iPhone上的数据不再存在。 不过不用…

力扣279完全平方数

力扣279完全平方数 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;…

Matlab|含sop的33节点配电网优化

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 程序以IEEE33节点为例&#xff0c;分析含sop的配电网优化&#xff0c;包括sop有功约束、无功约束和容量约束&#xff0c;非线性部分通过转换为旋转锥约束进行编程&#xff0c;并且包括33节点配电网潮流及对应…

【网络安全】安全事件管理处置 — windows应急响应

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、账户排查 二、windows网络排查 三、进程排查 四、windows注册表排查 五、内存分析 总结 一、账户排查 账户排查主要包含以下几个维度 登录服务器的途径弱口令可疑账号 新增…

2024年华为OD机试真题-智能驾驶-Python-OD统一考试(C卷D卷)

题目描述: 有一辆汽车需要从 m*n 的地图的左上角(起点)开往地图的右下角(终点),去往每一个地区都需要消耗一定的油量,加油站可进行加油 请你计算汽车确保从起点到达终点时所需的最少初始油量说明: (1) 智能汽车可以上下左右四个方向移动1 (2) 地图上的数字取值是 0或-1 或者…