🔥 重磅更新!easy-websocket-client v1 来袭,更灵活的 WebSocket 管理方案

140 阅读3分钟

🔥 重磅更新!easy-websocket-client v1 来袭,更灵活的 WebSocket 管理方案

之前分享的 easy-websocket-client 收到了很多同学的反馈,经过迭代优化,现在正式发布 v1 版本!这次更新带来了更灵活的事件处理模式、更智能的消息解析,以及对 Node.js 环境的完整支持,彻底解决了 v0 版本的使用痛点。


🚨 核心更新:为什么要升级到 v1?

🔥 破坏性更新(Breaking Changes)

(从 v0 升级必看!)

  • 移除构造函数事件回调:不再支持 onOpen/onClose 等配置项,改用更灵活的 on()/once()/off() 事件监听模式,更符合前端事件处理习惯。
  • TypeScript 类型重构:全面优化类型定义,事件参数、消息类型提示更精准,减少类型断言。

✨ 新增核心功能

  • jsonAble 自动解析:开启后自动将收到的 JSON 字符串解析为对象,省去手动 JSON.parse() 的重复工作。
  • Node.js 环境支持:通过 WebSocketImpl 参数传入 ws 库的 WebSocket 实现,轻松在 Node 服务中使用。
  • 一次性事件监听once() 方法支持监听单次触发的事件(如首次连接成功),避免内存泄漏。
  • 批量移除监听器offAll() 方法一键清除所有事件监听,在组件卸载时更方便清理资源。

🛠️ v1 核心特性详解

1. 事件监听模式:更符合前端开发习惯

v1 彻底改用事件驱动模式,支持细粒度的事件管理:

// 监听事件(多次触发)
client.on('open', () => {
  console.log('连接成功,可发送消息了');
});

// 监听单次事件(只触发一次)
client.once('message', (firstMsg) => {
  console.log('收到第一条消息:', firstMsg);
});

// 移除特定监听器
const handleMessage = (msg) => console.log(msg);
client.on('message', handleMessage);
client.off('message', handleMessage); // 不再监听

// 清除所有监听器
client.offAll();

2. jsonAble:自动解析 JSON 消息

无需手动处理字符串转对象,开启后直接拿到解析后的 JSON 数据:

const client = new WebSocketClient('wss://example.com/ws', {
  jsonAble: true, // 自动解析 JSON 消息
});

client.on('message', (data) => {
  // data 直接是解析后的对象,无需 JSON.parse()
  console.log('消息类型:', data.type); 
  console.log('消息内容:', data.content);
});

// 发送时也支持直接传对象(会自动 stringify)
client.send({ type: 'chat', content: 'Hello v1' });

3. 支持 Node.js 环境

通过 WebSocketImpl 参数适配 Node 环境,前后端统一 WebSocket 管理逻辑:

// Node.js 环境使用(需先安装 ws 库)
import WebSocketClient from 'easy-websocket-client';
import WebSocket from 'ws'; // 需单独安装:npm install ws

const client = new WebSocketClient('wss://example.com/ws', {
  WebSocketImpl: WebSocket, // 传入 Node 版 WebSocket 实现
  heartbeatInterval: 5000,
});

client.on('message', (data) => {
  console.log('Node 端收到消息:', data);
});

4. 更完善的单例模式支持

保留装饰器和高阶函数两种单例方案,结合事件监听更灵活:

import WebSocketClient, { singleton } from 'easy-websocket-client';

@singleton
class AppWebSocket extends WebSocketClient {
  constructor() {
    super('wss://app.example.com/ws', {
      jsonAble: true,
      maxReconnectAttempts: 5,
      connectResend: true, // 重连后自动补发未发送消息
    });

    // 初始化事件监听
    this.initEvents();
    this.connect();
  }

  private initEvents() {
    // 连接成功后发送认证信息
    this.on('open', () => {
      this.send({ type: 'auth', token: localStorage.getItem('token') });
    });

    // 统一处理业务消息
    this.on('message', (data) => {
      switch(data.type) {
        case 'notify':
          this.handleNotify(data);
          break;
        case 'chat':
          this.handleChat(data);
          break;
      }
    });
  }

  private handleNotify(notify) {
    // 处理通知逻辑
  }

  private handleChat(chat) {
    // 处理聊天逻辑
  }
}

// 全局唯一实例
const wsInstance = new AppWebSocket();

📦 快速上手 & 迁移指南

安装

# 安装最新版
npm install easy-websocket-client@latest
# 或指定 v1 版本
npm install easy-websocket-client@1

从 v0 迁移到 v1 只需 3 步:

  1. 移除构造函数中的事件回调:把 onOpen/onMessage 等配置,改为 client.on('open', ...) 监听。
  2. 按需开启 jsonAble:如果消息是 JSON 格式,开启后省掉手动解析。
  3. Node 环境添加 WebSocketImpl:如果在 Node 中使用,传入 ws 库的 WebSocket

🎯 适用场景升级

除了 v0 支持的实时聊天、通知中心等场景,v1 新增适用场景:

  • 跨端应用(同一套代码支持浏览器和 Node 服务)
  • 需要频繁绑定/解绑事件的复杂交互场景(如组件化开发)
  • 大量 JSON 消息交互的业务(减少解析代码)

📚 资源地址

如果在升级或使用中遇到问题,欢迎提 Issue 或在评论区留言,我会第一时间回复!觉得有用的话,别忘了给个 Star ⭐ 支持下~