{"_id":"@dctmaziyo/easy-websocket-client","_rev":"3-d07936a16eff30a9bdcf2d51a4a4a7fb","name":"@dctmaziyo/easy-websocket-client","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@dctmaziyo/easy-websocket-client","version":"1.0.0","keywords":["websocket","socket"],"license":"MIT","_id":"@dctmaziyo/easy-websocket-client@1.0.0","maintainers":[{"name":"dctmaziyo","email":"247948681@qq.com"}],"homepage":"https://github.com/Dmaziyo/easy-websocket-client#readme","bugs":{"url":"https://github.com/Dmaziyo/easy-websocket-client/issues","email":"247948681@qq.com"},"dist":{"shasum":"36e46377f23b30b4c371c78a3b73a839a7d83ba9","tarball":"https://registry.npmjs.org/@dctmaziyo/easy-websocket-client/-/easy-websocket-client-1.0.0.tgz","fileCount":12,"integrity":"sha512-FHxeLxTqHSoQZMg3nKrjnALjKIam6mGWwO+Ejf/KvQAqrN3W5IZiL0M9Hwv314Etfpun8soDsPz1NPXVaNF68g==","signatures":[{"sig":"MEYCIQCca+E0v5LEttLEWDn15TN4rWFi14GBN2SGiOFvQUFcwAIhALHeACoFvYRnN/riJKVyuRg2BAx6lL5GM5aPF8aFeX1g","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40740},"main":"./dist/cjs/index.js","type":"module","types":"./types/index.d.ts","unpkg":"./dist/umd/index.js","config":{"commitizen":{"path":"node_modules/cz-git"}},"module":"./dist/es/index.js","gitHead":"de1e210636fae00870dce63652f2cb2529fab22b","scripts":{"test":"vitest","build":"rimraf types && pnpm build:base","ci:beta":"npm publish --tag beta","build:umd":"vite build -c ./vite.config.umd.ts","build:base":"rimraf types && vite build","ci:publish":"npm publish","lint-staged":"lint-staged"},"_npmUser":{"name":"dctmaziyo","email":"247948681@qq.com"},"overrides":{"vite":"npm:rolldown-vite@latest"},"repository":{"url":"git+https://github.com/Dmaziyo/easy-websocket-client.git","type":"git"},"_npmVersion":"10.9.2","description":"A Socket class for managing WebSocket connections, with various WebSocket wrappers for reconnection, heartbeat messages and event handling options.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"eventemitter3":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","vite":"npm:rolldown-vite@latest","husky":"^9.1.7","cz-git":"^1.11.1","oxlint":"^0.16.3","rimraf":"^6.0.1","vitest":"^3.0.8","typescript":"^5.7.3","lint-staged":"^13.2.0","@changesets/cli":"^2.28.1","@commitlint/cli":"^19.5.0","vite-plugin-dts":"^4.5.3","@commitlint/config-conventional":"^19.5.0"},"_npmOperationalInternal":{"tmp":"tmp/easy-websocket-client_1.0.0_1770714260250_0.055775405347197715","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@dctmaziyo/easy-websocket-client","version":"1.0.1","keywords":["websocket","socket"],"license":"MIT","_id":"@dctmaziyo/easy-websocket-client@1.0.1","maintainers":[{"name":"dctmaziyo","email":"247948681@qq.com"}],"homepage":"https://github.com/Dmaziyo/easy-websocket-client#readme","bugs":{"url":"https://github.com/Dmaziyo/easy-websocket-client/issues","email":"247948681@qq.com"},"dist":{"shasum":"e11fff5c22e9256846c2f6bab0425d7cc04105ec","tarball":"https://registry.npmjs.org/@dctmaziyo/easy-websocket-client/-/easy-websocket-client-1.0.1.tgz","fileCount":12,"integrity":"sha512-CAh787EOBvGKigOM18iXn9g538IweznH/n+Zk7wtWhDedTlLEWvLZDadgiTCWkoSf1HdJAvZgNIW4PjAx5Ujrw==","signatures":[{"sig":"MEYCIQDrOJL7muPkuSUXiOuh/Y2E7IQF4htcHjJT/1nGjVNgNAIhAI8uMZstUSUzJvI/a03SsZZnM8d1EInyQ80V+ZdgrXMq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40772},"main":"./dist/cjs/index.js","type":"module","types":"./types/index.d.ts","unpkg":"./dist/umd/index.js","config":{"commitizen":{"path":"node_modules/cz-git"}},"module":"./dist/es/index.js","gitHead":"861725d3134df72e0356edb435230c8d9652b3fb","scripts":{"test":"vitest","build":"rimraf types && pnpm build:base","ci:beta":"npm publish --tag beta","build:umd":"vite build -c ./vite.config.umd.ts","build:base":"rimraf types && vite build","ci:publish":"npm publish","lint-staged":"lint-staged"},"_npmUser":{"name":"dctmaziyo","email":"247948681@qq.com"},"overrides":{"vite":"npm:rolldown-vite@latest"},"repository":{"url":"git+https://github.com/Dmaziyo/easy-websocket-client.git","type":"git"},"_npmVersion":"10.9.2","description":"A Socket class for managing WebSocket connections, with various WebSocket wrappers for reconnection, heartbeat messages and event handling options.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"eventemitter3":"^5.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","vite":"npm:rolldown-vite@latest","husky":"^9.1.7","cz-git":"^1.11.1","oxlint":"^0.16.3","rimraf":"^6.0.1","vitest":"^3.0.8","typescript":"^5.7.3","lint-staged":"^13.2.0","@changesets/cli":"^2.28.1","@commitlint/cli":"^19.5.0","vite-plugin-dts":"^4.5.3","@commitlint/config-conventional":"^19.5.0"},"_npmOperationalInternal":{"tmp":"tmp/easy-websocket-client_1.0.1_1770715207764_0.9885337243248791","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@dctmaziyo/easy-websocket-client","description":"A Socket class for managing WebSocket connections, with various WebSocket wrappers for reconnection, heartbeat messages and event handling options.","keywords":["websocket","socket"],"version":"1.0.2","scripts":{"build:umd":"vite build -c ./vite.config.umd.ts","build:base":"rimraf types && vite build","build":"rimraf types && pnpm build:base","ci:publish":"npm publish","ci:beta":"npm publish --tag beta","test":"vitest","lint-staged":"lint-staged"},"publishConfig":{"access":"public"},"type":"module","main":"./dist/cjs/index.js","module":"./dist/es/index.js","types":"./types/index.d.ts","unpkg":"./dist/umd/index.js","repository":{"type":"git","url":"git+https://github.com/Dmaziyo/easy-websocket-client.git"},"bugs":{"url":"https://github.com/Dmaziyo/easy-websocket-client/issues","email":"247948681@qq.com"},"license":"MIT","devDependencies":{"@changesets/cli":"^2.28.1","@commitlint/cli":"^19.5.0","@commitlint/config-conventional":"^19.5.0","cz-git":"^1.11.1","husky":"^9.1.7","lint-staged":"^13.2.0","oxlint":"^0.16.3","rimraf":"^6.0.1","typescript":"^5.7.3","vite":"npm:rolldown-vite@latest","vite-plugin-dts":"^4.5.3","vitest":"^3.0.8","ws":"^8.18.3"},"overrides":{"vite":"npm:rolldown-vite@latest"},"config":{"commitizen":{"path":"node_modules/cz-git"}},"dependencies":{"eventemitter3":"^5.0.1"},"_id":"@dctmaziyo/easy-websocket-client@1.0.2","gitHead":"22d930cf52a8bceb056e167bb1f06337ae81276c","homepage":"https://github.com/Dmaziyo/easy-websocket-client#readme","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-eayE+gsiEmcwIVSKMYQsG1+k9U43jXH+uJUjHsO78P1BxEgFjWXWPHfLVwBnuIGlypjUqIdBdCnbvvQOSQWU7A==","shasum":"47b21f4caa1ee79ed9cb818a8c1131932d3f4524","tarball":"https://registry.npmjs.org/@dctmaziyo/easy-websocket-client/-/easy-websocket-client-1.0.2.tgz","fileCount":12,"unpackedSize":41174,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCEvVhfhOX7JXJ0D6fKnrgBJCZck5nWxlNtMGglgDXGOQIgSDKLDxYT39Lf4gSfS+p6egwr3VOaKU6qtQMPfpmv8Ns="}]},"_npmUser":{"name":"dctmaziyo","email":"247948681@qq.com"},"directories":{},"maintainers":[{"name":"dctmaziyo","email":"247948681@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/easy-websocket-client_1.0.2_1774409741842_0.4848440139233634"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-10T09:04:20.189Z","modified":"2026-03-25T03:35:42.127Z","1.0.0":"2026-02-10T09:04:20.399Z","1.0.1":"2026-02-10T09:20:07.890Z","1.0.2":"2026-03-25T03:35:42.004Z"},"bugs":{"url":"https://github.com/Dmaziyo/easy-websocket-client/issues","email":"247948681@qq.com"},"license":"MIT","homepage":"https://github.com/Dmaziyo/easy-websocket-client#readme","keywords":["websocket","socket"],"repository":{"type":"git","url":"git+https://github.com/Dmaziyo/easy-websocket-client.git"},"description":"A Socket class for managing WebSocket connections, with various WebSocket wrappers for reconnection, heartbeat messages and event handling options.","maintainers":[{"name":"dctmaziyo","email":"247948681@qq.com"}],"readme":"# Easy-Websocket-Client\n\n**[English document](https://github.com/Dmaziyo/easy-websocket-client/blob/main/README.en.md)**\n\n## 介绍\n\n`Easy-Websocket-Client` 是一个用于管理 WebSocket 连接的库，提供了自动重连、心跳消息和事件处理等功能。\n\n## 安装\n\n```bash\n# 使用 npm\nnpm i @dctmaziyo/easy-websocket-client\n\n# 使用 yarn\nyarn add @dctmaziyo/easy-websocket-client\n\n# 使用 pnpm\npnpm add @dctmaziyo/easy-websocket-client\n```\n\n## ⚠️ 破坏性更新 Breaking Changes\n\n**v1.0.0** 版本移除了构造函数中的事件回调选项，现在使用事件监听器模式：\n\n- **移除**：`onOpen`, `onClose`, `onMessage`, `onError` 构造选项\n- **新增**：使用 `client.on()`, `client.once()`, `client.off()` 方法监听事件\n- **新增**：`jsonAble` 选项自动解析 JSON 消息\n- **新增**：`WebSocketImpl`参数, 用于支持`node`, 在`node`环境中需要传入`ws`库中的`WebSocket`\n- **改进**：更好的 `TypeScript` 类型支持\n\n## 基础使用\n\n### 创建 WebSocket 连接\n\n```typescript\nimport WebSocketClient from 'easy-websocket-client';\n\n// 创建客户端实例\nconst client = new WebSocketClient('wss://example.com/socket', {\n  showLog: true,\n  reconnectInterval: 2000,\n  heartbeatInterval: 10000,\n  heartbeatMessage: 'ping',\n  maxReconnectAttempts: 5,\n  protocols: ['chat'],\n  connectResend: true,\n  jsonAble: true // 自动解析 JSON 消息\n});\n\n// 添加事件监听器\nclient.on('open', () => console.log('Connection opened'));\nclient.on('close', (e) => console.log('Connection closed', e));\nclient.on('message', (message) => console.log('Received message', message));\nclient.on('error', (error) => console.error('Error occurred', error));\n\n// 开始连接\nclient.connect();\n\n// 发送消息\nclient.send({ type: 'chat', content: 'Hello World' });\n\n// 关闭连接\nclient.close();\n```\n\n## 单例模式的使用\n\n在使用 `easy-websocket-client` 进行二次封装时，可以使用单例模式来确保每个页面使用相同的 WebSocket 连接，避免重复创建连接的问题。\n注: 使用单例可以在所有页面或生命周期进行实例化, 可以不需要在监听中处理过多重连或刷新页面后重新连接问题, 会自动处理。\n\n### 使用装饰器实现单例\n\n```typescript\nimport WebSocketClient, { singleton } from 'easy-websocket-client';\n\n// 你需要的获取消息的类型\ninterface Message {\n  type: string;\n  data: any;\n}\n\n@singleton\nclass MyWebSocketClient extends WebSocketClient {\n  constructor() {\n    // url 处理\n    const protocol = window.location.protocol === \"https:\" ? \"wss\" : \"ws\";\n    const host = window.location.host;\n    // 处理 url 的 protocol 和 host\n    const baseURL = import.meta.env.DEV\n      ? \"ws://\" + import.meta.env.VITE_WS_HOST + \":\" + import.meta.env.VITE_PORT + \"/ws\"\n      : import.meta.env.VITE_API_URL.includes(\"ws\") || import.meta.env.VITE_API_URL.includes(\"http\")\n        ? import.meta.env.VITE_API_URL\n        : `${protocol}://${host}${import.meta.env.VITE_API_URL.includes(\"/\") ? \"\" : \"/\"}${import.meta.env.VITE_API_URL}`;\n\n    super(baseURL, {\n      heartbeatMessage: JSON.stringify({ type: 'HEARTBEAT', textMsg: \"ping\" }),\n      heartbeatInterval: 10000,\n      maxReconnectAttempts: 3,\n      connectResend: true,\n      jsonAble: true // 自动解析 JSON\n    });\n\n    // 使用事件监听器而不是构造选项\n    this.on('message', (data: Message) => {\n      // 你的接收到的消息处理(建议使用发布订阅模式)\n      console.log('Received:', data);\n    });\n\n    this.on('open', (e) => {\n      // 你的连接成功处理(建议使用发布订阅模式)\n      console.log('Connected:', e);\n    });\n\n    this.on('close', (e) => {\n      // 你的连接关闭处理(建议使用发布订阅模式)\n      console.log('Disconnected:', e);\n    });\n\n    this.on('error', (e) => {\n      // 你的连接错误处理(建议使用发布订阅模式)\n      console.error('WebSocket error:', e);\n    });\n\n    this.connect();\n  }\n\n  public close = () => {\n    super.close();\n    MyWebSocketClient.reset();\n  };\n}\n\nconst clientInstance = new MyWebSocketClient();\n```\n\n### 使用高阶函数实现单例（不支持装饰器的情况下）\n\n```typescript\nimport WebSocketClient, { singleton } from 'easy-websocket-client';\n\nconst SingletonWebSocketClient = singleton(WebSocketClient);\n\nconst clientInstance = new SingletonWebSocketClient('wss://example.com/socket', {\n  jsonAble: true,\n  connectResend: true\n});\n\n// 添加事件监听\nclientInstance.on('message', (data) => {\n  console.log('Message received:', data);\n});\n\nclientInstance.connect();\n```\n\n## API 参考\n\n### 构造选项\n\n```typescript\ninterface WebSocketClientOptions {\n  showLog?: boolean;              // 是否显示日志\n  reconnectInterval?: number;     // 重连间隔(ms)，默认 1000\n  heartbeatInterval?: number;     // 心跳间隔(ms)，默认 10000\n  heartbeatMessage?: string;      // 心跳消息，默认 \"ping\"\n  maxReconnectAttempts?: number;  // 最大重连次数，默认 0(无限)\n  protocols?: string[];           // WebSocket 协议\n  connectResend?: boolean;        // 重连后重发消息，默认 false\n  jsonAble?: boolean;             // 自动解析 JSON，默认 false\n}\n```\n\n### 事件类型\n\n- `open`: 连接建立时触发\n- `close`: 连接关闭时触发\n- `message`: 接收到消息时触发\n- `error`: 发生错误时触发\n\n### 方法\n\n- `connect()`: 建立连接\n- `send(message)`: 发送消息\n- `close()`: 关闭连接\n- `on(event, listener)`: 添加事件监听器\n- `once(event, listener)`: 添加一次性事件监听器\n- `off(event, listener)`: 移除事件监听器\n- `offAll()`: 移除所有事件监听器\n\n## 📝 贡献指南\n欢迎提交`issue`或`pull request`，共同完善`Easy-Websocket-Client`。\n\n## 📄 许可证\n\nMIT\n","readmeFilename":"README.md"}