websocketmanager 类通过 static instance 实现单例,首次调用 getinstance() 创建连接并监听事件,后续返回同一实例;闭包方式用 let socket = null 缓存唯一实例,getsocket() 统一管理创建与复用;内部维护 handlers 数组实现多监听器事件代理,支持 on/off/emit,断线时暂停发送队列并自动重连。

直接用一个静态属性或闭包缓存 WebSocket 实例,确保多次调用获取的是同一个连接对象,同时处理重连、状态同步和事件委托。
用类 + 静态实例属性实现
定义一个 WebSocketManager 类,把实例存在 static instance 上。构造函数里只初始化一次连接,并拦截重复创建请求:
- 首次调用
getInstance()时创建 WebSocket,并监听open、error、close等事件 - 后续调用直接返回已存在的实例,不新建连接
- 在
onclose中可自动触发重连(加防抖或指数退避)
用闭包封装私有实例(更轻量)
不依赖类,用立即执行函数包裹 WebSocket 创建逻辑,对外只暴露统一的访问方法:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 内部变量
let socket = null保存唯一实例 - 导出的
getSocket()方法检查socket是否存在且未关闭,否则重建 - 所有发送消息、绑定回调都通过该函数中转,避免外部直接操作原生 socket
关键细节:状态管理与事件代理
原生 WebSocket 的 onmessage 是覆盖式赋值,多个模块监听会互相覆盖。解决方案:
- 在单例内部维护一个
handlers = []数组,用on('message', cb)注册回调 -
socket.onmessage统一触发所有注册的 handler,类似事件总线 - 提供
off('message', cb)和emit(data)方法,让业务层解耦 - 连接断开时暂停发送队列,恢复后重发未确认的消息(可选)
简单示例(闭包方式)
import { getSocket } from './ws-manager.js';const ws = getSocket('wss://api.example.com'); // 多次调用返回同一实例ws.on('message', data => console.log(data));ws.send({ type: 'auth', token: 'xxx' });
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










