New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details
Socket
Book a DemoSign in
Socket

supa-simple-socket

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

supa-simple-socket

一个简单易用的WebSocket客户端工具,支持心跳机制、断点重连和事件订阅

latest
Source
npmnpm
Version
1.0.0
Version published
Maintainers
1
Created
Source

Supa Simple Socket

一个简单易用的WebSocket客户端工具,支持心跳机制、断点重连、事件订阅和文件传输功能。

特性

  • 🔄 自动重连 - 网络波动时自动重连,支持指数退避策略
  • 💓 心跳检测 - 保持连接活跃,支持自定义心跳消息
  • 🔔 事件驱动 - 丰富的事件系统,支持链式调用
  • 消息队列 - 连接未建立时自动队列消息
  • 📁 文件传输 - 支持分块发送大文件,提供进度回调
  • 📊 状态管理 - 完整的连接状态管理和状态变化通知
  • 🔧 易于配置 - 丰富的配置选项,支持运行时更新
  • 📝 调试日志 - 可选的调试日志,帮助排查问题
  • 🛠️ 类型安全 - 完整的TypeScript类型定义
  • 🔁 兼容原生 - 兼容并增强原生WebSocket功能

安装

npm install supa-simple-socket

快速开始

import SupaSocket from 'supa-simple-socket';

// 创建WebSocket实例
const socket = new SupaSocket({
  url: 'wss://echo.websocket.org',
  debug: true
});

// 监听消息
socket.on('message', (data) => {
  console.log('收到消息:', data);
});

// 监听连接状态
socket.on('open', () => {
  console.log('连接已建立');
  
  // 发送消息
  socket.send({ type: 'greeting', content: '你好,世界!' });
});

// 监听错误
socket.on('error', (error) => {
  console.error('连接错误:', error);
});

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

进阶用法

1. 发送不同类型的消息

// 发送JSON对象
socket.sendJson({ type: 'chat', message: '你好!', timestamp: Date.now() });

// 发送文本
socket.sendText('普通文本消息');

// 发送二进制数据
const buffer = new ArrayBuffer(8);
socket.sendBinary(buffer);

// 发送文件
const fileInput = document.querySelector<HTMLInputElement>('#fileInput');
if (fileInput?.files?.[0]) {
  socket.sendFile(fileInput.files[0], {
    onProgress: (progress) => {
      console.log(`上传进度: ${progress.toFixed(2)}%`);
    },
    chunkSize: 32 * 1024 // 设置块大小为32KB
  });
}

2. 使用事件系统

// 使用链式调用添加多个事件监听器
socket
  .on('open', () => console.log('连接已打开'))
  .on('message', (data) => console.log('收到消息', data))
  .on('close', () => console.log('连接已关闭'))
  .on('error', (error) => console.error('发生错误', error))
  .on('reconnecting', (data) => {
    console.log(`正在尝试重连 (${data.attempt}/${data.limit}),延迟:${data.delay}ms`);
  })
  .on('statusChange', ({ newStateName, oldStateName }) => {
    console.log(`连接状态从 ${oldStateName} 变为 ${newStateName}`);
  });

// 一次性事件监听(触发一次后自动移除)
socket.once('message', (firstMessage) => {
  console.log('收到第一条消息后我不会再被调用:', firstMessage);
});

// 移除特定事件的所有监听器
socket.off('message');

// 检查是否有某个事件的监听器
if (socket.hasListeners('error')) {
  console.log('已注册错误处理器');
}

// 获取所有已注册的事件
console.log('已注册的事件:', socket.events);

3. 连接管理

// 检查连接状态
if (socket.isConnected) {
  console.log('WebSocket已连接');
}

// 获取当前连接状态
console.log('当前状态:', socket.connectionStateName);

// 手动重连
socket.reconnect();

// 重置重连计数并重连
socket.reconnect(true);

// 检查连接并在需要时自动重连
socket.checkConnection();

// 禁用自动重连
socket.disableAutoReconnect();

// 重新启用自动重连
socket.enableAutoReconnect();

// 获取最后一次收到消息的时间
console.log('最后接收消息时间:', socket.lastReceivedTime);

// 获取距离最后一次收到消息的时间(毫秒)
console.log('消息静默时间:', socket.timeSinceLastMessage);

// 销毁实例并释放资源
socket.destroy();

4. 更新配置

// 实例化后更新配置
socket.updateOptions({
  heartbeatInterval: 20000,
  reconnectLimit: 10,
  debug: true
});

// 获取当前配置
const currentOptions = socket.getOptions();
console.log('当前配置:', currentOptions);

配置选项

SupaSocket 构造函数接受以下配置选项:

选项类型默认值说明
urlstring-WebSocket服务器URL(必填)
reconnectLimitnumber5最大重连次数
reconnectIntervalnumber5000重连初始间隔(毫秒)
heartbeatIntervalnumber30000心跳发送间隔(毫秒)
heartbeatTimeoutnumber5000心跳超时时间(毫秒)
autoReconnectbooleantrue是否自动重连
debugbooleanfalse是否输出调试日志
protocolsstring | string[]-WebSocket协议
binaryTypeBinaryType-二进制数据类型
autoParseMessagebooleantrue是否自动解析JSON消息
maxReconnectDelaynumber30000最大重连延迟(毫秒)
retryOnErrorbooleantrue错误时是否重试
connectionTimeoutnumber10000连接超时时间(毫秒)
pingMessageany{ type: 'ping' }自定义心跳消息
pongMessageany{ type: 'pong' }自定义心跳响应消息
onOpen(event) => void-连接建立回调
onClose(event) => void-连接关闭回调
onError(event) => void-连接错误回调
onStatusChange(newState, oldState) => void-状态变化回调

API参考

属性

  • connectionState: 获取当前连接状态(枚举值)
  • connectionStateName: 获取当前连接状态名称(字符串)
  • events: 获取所有已注册的事件名称
  • lastReceivedTime: 获取最后一次收到消息的时间
  • timeSinceLastMessage: 获取自上次收到消息以来的毫秒数
  • isConnected: 连接是否处于打开状态
  • currentReconnectAttempt: 当前重连尝试次数

方法

连接管理

  • reconnect(resetCount?: boolean): 手动触发重连
  • close(code?: number, reason?: string): 关闭连接
  • checkConnection(): 检查连接状态并在需要时重连
  • updateOptions(options: Partial): 更新配置选项
  • getOptions(): 获取当前配置选项
  • enableAutoReconnect(): 启用自动重连
  • disableAutoReconnect(): 禁用自动重连
  • destroy(): 销毁实例并释放资源

消息发送

  • send(data: any): 发送消息(自动处理不同类型)
  • sendJson(data: object): 发送JSON对象
  • sendText(text: string): 发送文本消息
  • sendBinary(data: ArrayBuffer | Blob): 发送二进制数据
  • sendFile(file: File, options?: object): 发送文件,支持进度回调

事件处理

  • on(event: string, callback: (data: any) => void): 添加事件监听器
  • off(event: string, callback?: Function): 移除事件监听器
  • once(event: string, callback: (data: any) => void): 添加一次性事件监听器
  • clearAllListeners(): 清除所有事件监听器
  • hasListeners(event: string): 检查是否有特定事件的监听器

事件

  • open: 连接建立时触发
  • message: 收到消息时触发
  • close: 连接关闭时触发
  • error: 连接错误时触发
  • reconnecting: 重连开始时触发,包含尝试次数和限制信息
  • reconnectFailed: 重连失败(超过最大次数)时触发
  • heartbeatTimeout: 心跳超时时触发
  • connectionTimeout: 连接超时时触发
  • statusChange: 连接状态变化时触发
  • file_progress: 文件发送进度更新时触发
  • [其他]: 如果收到的消息有type字段,也会触发对应type的事件

连接状态

ConnectionState 枚举定义了以下连接状态:

  • CONNECTING: 连接中
  • OPEN: 已连接
  • CLOSING: 关闭中
  • CLOSED: 已关闭
  • RECONNECTING: 重连中

为什么使用 Supa Simple Socket?

相比原生WebSocket,Supa Simple Socket提供了以下优势:

  • 自动重连机制 - 网络波动时无需手动处理重连逻辑
  • 心跳保活 - 自动处理连接保活,避免连接被中断
  • 事件驱动设计 - 更直观的事件处理方式,支持链式调用
  • 类型安全 - 完整的TypeScript类型定义,提供更好的开发体验
  • 消息队列 - 连接建立前的消息自动加入队列,连接成功后发送
  • 丰富的API - 提供更多实用方法,简化WebSocket使用
  • 状态管理 - 完整的连接状态管理和通知
  • 文件传输 - 内置文件发送功能,支持大文件和进度反馈
  • 可配置性 - 丰富的配置选项,满足不同需求
  • 调试友好 - 内置日志功能,便于调试

兼容性

该库可以在所有支持WebSocket API的现代浏览器和Node.js环境中使用。

示例

详细的示例可以查看test/demo.html

许可证

MIT

Keywords

websocket

FAQs

Package last updated on 25 Mar 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts