轻松管理 WebSocket 连接!easy-websocket-client

在前端开发中,WebSocket 是实现实时通信的核心技术,但原生 WebSocket 的连接管理(如断连重连、心跳维护、事件监听)往往需要编写大量重复代码。今天给大家分享一个好用的 WebSocket 连接管理库 ------ easy-websocket-client,功能都已经封装好,配置一下就好了。

主要功能特性

1. 自动重连机制

reconnectInterval:重连间隔

maxReconnectAttempts:最大重连次数

断连后自动发起重连,达到最大次数后停止尝试

适用于网络不稳定场景,减少手动处理重连的繁琐代码

2. 可定制化心跳

heartbeatMessage:自定义心跳消息内容(支持字符串或对象)

heartbeatInterval:心跳发送间隔

自动检测服务端响应,心跳失败时触发重连

3. 全生命周期事件回调

onOpen:连接成功时触发

onClose:连接关闭时触发(携带 CloseEvent 参数)

onMessage:接收消息时触发(自动解析文本 / 二进制数据)

onError:连接报错时触发(捕获网络错误等异常)

快速上手

安装

npm 复制代码
# npm
npm install easy-websocket-client

# yarn
yarn add easy-websocket-client

# pnpm
pnpm add easy-websocket-client

基本使用

vue 复制代码
import WebSocketClient from 'easy-websocket-client';

// 创建连接实例
const client = new WebSocketClient('wss://example.com/socket', {
  showLog: true,                  // 开启控制台日志
  reconnectInterval: 2000,        // 重连间隔 2 秒
  heartbeatInterval: 10000,       // 心跳间隔 10 秒
  heartbeatMessage: 'ping',       // 心跳消息
  maxReconnectAttempts: 5,        // 最大重连次数
  onOpen: () => console.log('连接已打开'),
  onClose: (e) => console.log('连接关闭', e),
  onMessage: (message) => console.log('收到消息', message),
  onError: (error) => console.error('连接错误', error),
});

// 发起连接
client.connect();

// 发送消息
client.send('Hello WebSocket!');

// 关闭连接
client.close();

单例模式实现(装饰器方式)

typescript 复制代码
import { singleton } from 'easy-websocket-client';

interface Message {
  type: string;
  data: any;
}

@singleton
class MyWebSocketClient extends WebSocketClient<Message> {
  constructor() {
    // 动态生成连接地址(支持开发/生产环境区分)
    const baseURL = import.meta.env.DEV
      ? `ws://${import.meta.env.VITE_WS_HOST}:${import.meta.env.VITE_PORT}/ws`
      : import.meta.env.VITE_API_URL;

    super(baseURL, {
      heartbeatMessage: { type: 'HEARTBEAT', textMsg: 'ping' }, // 对象类型心跳消息
      heartbeatInterval: 10000,
      maxReconnectAttempts: 3,
      connectResend: true, // 重连后自动重发未完成的消息
      onMessage(data) {
        console.log('业务消息处理:', data);
      },
    });

    this.connect();
  }

  // 支持手动关闭并重置单例
  public close = () => {
    super.close();
    MyWebSocketClient.reset(); // 重置单例实例
  };
}

// 全局唯一实例
const clientInstance = new MyWebSocketClient();

适用场景

实时聊天系统(如客服对话、直播间弹幕)

通知中心(如新消息提醒、系统公告推送)

实时数据监控(如仪表盘数据实时更新)

协同编辑工具(多人协作场景下的状态同步)

游戏实时交互(低延迟的游戏状态同步)

相关推荐
ℋᙚᵐⁱᒻᵉ鲸落3 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙5 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
予昊5 小时前
从零实现“在线五子棋对战“:WebSocket 实时通信 + 段位匹配
java·开发语言·网络·websocket
前端snow6 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上6 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
星栈6 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香6 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest6 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士8 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见8 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain