|
1 | 1 | # 介绍
|
2 | 2 |
|
3 |
| -`ClientWs` 是一个灵活且功能丰富的 `WebSocket` 客户端类,用于与 `WebSocket` 服务器进行通信。它支持自动重连、消息缓存和事件监听等功能 |
| 3 | +`@coderlzw/ws` 是一个灵活且功能丰富的 `WebSocket` 客户端(`node`、`browser`)类,用于与 `WebSocket` 服务器进行通信。它支持自动重连、消息缓存和事件监听等功能 |
4 | 4 |
|
5 | 5 | # 安装
|
6 | 6 |
|
7 | 7 | ```shell
|
8 |
| -npm add @coderlzw/client-ws |
| 8 | +npm add @coderlzw/ws |
9 | 9 | // or
|
10 |
| -yarn add @coderlzw/client-ws |
| 10 | +yarn add @coderlzw/ws |
11 | 11 | // or
|
12 |
| -pnpm add @coderlzw/client-ws |
| 12 | +pnpm add @coderlzw/ws |
13 | 13 | ```
|
14 | 14 |
|
15 |
| -# 使用 |
16 |
| - |
17 |
| -```ts |
18 |
| -import ClientWs from '@coderlzw/client-ws'; |
19 |
| - |
20 |
| -const wsClient = new ClientWs({ |
21 |
| - url: 'wss://example.com/socket', // WebSocket 服务器地址 |
22 |
| - timeout: 5000, // 可选,连接超时时间(毫秒) |
23 |
| - reconnect: true, //可选,是否自动重连,默认为 true |
24 |
| - reconnectInterval: 5000, //可选, 重连间隔(毫秒),默认为 5000 |
25 |
| - reconnectMaxInterval: 10000, // 可选,最大重连间隔(毫秒),默认为 10000 |
26 |
| - reconnectMaxTimes: 10, // 可选,最大重连次数,默认为 10 |
27 |
| - uniqueKey: 'message_id', // 消息唯一标识符,。默认值为 message_id |
28 |
| - cacheMessage: true, // 是否缓存未发送的消息,默认值为 false |
29 |
| - maxCacheMessage: 100 // 缓存消息的最大数量,默认值为 100 |
30 |
| -}); |
31 |
| - |
32 |
| -// 连接到 WebSocket 服务器 |
33 |
| -wsClient.connect(); |
34 |
| - |
35 |
| -// 监听事件 |
36 |
| -wsClient.on('open', (event) => { |
37 |
| - console.log('WebSocket 连接已打开', event); |
38 |
| -}); |
| 15 | +# WebSocketClient |
| 16 | + |
| 17 | +## 特性 |
| 18 | + |
| 19 | +- 支持自动重连 |
| 20 | +- 消息缓存机制 |
| 21 | +- 支持发送和接收二进制数据 |
| 22 | +- 事件监听机制 |
| 23 | + |
| 24 | +## 用法 |
| 25 | + |
| 26 | +```javascript |
| 27 | +import { WebSocketClient } from "@coderlzw/ws"; |
| 28 | + |
| 29 | +const ws = new WebSocketClient("ws://127.0.0.1:8080"); |
| 30 | +// 需要调用 connect 才会建立连接 |
| 31 | +ws.connect(); |
| 32 | +ws.on("open", (event) => { |
| 33 | + // ... |
| 34 | +}) |
| 35 | + .on("close", (closeEvent) => { |
| 36 | + // ... |
| 37 | + }) |
| 38 | + .on("error", (event) => { |
| 39 | + // ... |
| 40 | + }) |
| 41 | + .on("message", (messageEvent) => { |
| 42 | + // ... |
| 43 | + }); |
| 44 | +``` |
39 | 45 |
|
40 |
| -wsClient.on('message', (event) => { |
41 |
| - console.log('收到消息:', event.data); |
42 |
| -}); |
| 46 | +### 发送消息 |
43 | 47 |
|
44 |
| -wsClient.on('close', (event) => { |
45 |
| - console.log('WebSocket 连接已关闭', event); |
46 |
| -}); |
| 48 | +```ts |
| 49 | +/// 无回调函数 |
| 50 | +ws.sendMessage("hello"); |
47 | 51 |
|
48 |
| -wsClient.on('error', (event) => { |
49 |
| - console.error('WebSocket 错误:', event); |
| 52 | +// 有回调函数 |
| 53 | +ws.sendMessage<{ name: string }>({ name: "张三" }, (error, data) => { |
| 54 | + // error: null |
| 55 | + // data: { name: "张三", message_id: "xxxxx" } |
50 | 56 | });
|
51 | 57 |
|
52 |
| -// 发送消息 |
53 |
| -wsClient.sendMessage({ text: 'Hello, World!' }, (error, response) => { |
54 |
| - if (error) { |
55 |
| - console.error('消息发送失败:', error); |
56 |
| - } else { |
57 |
| - console.log('消息发送成功:', response); |
58 |
| - } |
| 58 | +// 异步 |
| 59 | +ws.sendMessageAsync<{ name: string }>({ name: "张三" }).then((data) => { |
| 60 | + // data: { name: "张三", message_id: "xxxxx"} |
59 | 61 | });
|
| 62 | +``` |
60 | 63 |
|
61 |
| -// 使用异步发送消息 |
62 |
| -wsClient.sendMessageAsync({ text: 'Hello, Async!' }) |
63 |
| - .then(response => { |
64 |
| - console.log('异步消息发送成功:', response); |
65 |
| - }) |
66 |
| - .catch(error => { |
67 |
| - console.error('异步消息发送失败:', error); |
68 |
| - }); |
69 |
| - |
70 |
| -// 关闭连接 |
71 |
| -wsClient.close(); |
| 64 | +# WebSocketServer |
72 | 65 |
|
73 |
| -// 销毁客户端 |
74 |
| -wsClient.destroy(); |
| 66 | +```ts |
| 67 | +import { WebSocketServer } from "@coderlzw/ws"; |
| 68 | + |
| 69 | +const ws = new WebSocketServer("ws://localhost:8080"); |
| 70 | + |
| 71 | +ws.connect(); |
| 72 | + |
| 73 | +ws.on("open", (instance) => { |
| 74 | + console.log("open", instance); |
| 75 | +}) |
| 76 | + .on("error", (instance, err) => { |
| 77 | + console.log("error", err); |
| 78 | + }) |
| 79 | + .on("close", (instance, code, reason) => { |
| 80 | + console.log("close", event); |
| 81 | + }) |
| 82 | + .on("message", (instance, data, isBinary) => { |
| 83 | + console.log("message", data, isBinary); |
| 84 | + }); |
75 | 85 | ```
|
76 | 86 |
|
77 |
| -# 方法 |
78 |
| - |
79 |
| -- `connect()`: 连接到 WebSocket 服务器。 |
80 |
| -- `sendMessage<R = any, S = any>(data: S, callback?: MessageCallback<R>)`: 发送消息。如果 `WebSocket` 未连接且 |
81 |
| - `cacheMessage` |
82 |
| - 选项为 true,则消息会被缓存。`data` 可以是字符串或对象。 |
83 |
| -- `sendMessageAsync<R = any, S = any>(data: S): Promise<R>`: 发送消息并返回一个 Promise。 |
84 |
| -- `close()`: 关闭 WebSocket 连接。 |
85 |
| -- `destroy()`: 销毁 WebSocket 客户端,移除所有监听器并关闭连接。 |
86 |
| -- `on(event: string, listener: SocketEventListener)`: 添加事件监听器。支持的事件包括 `open`、`close`、`message` 和 `error`。 |
87 |
| -- `once(event: string, listener: SocketEventListener)`: 添加一个一次性事件监听器。 |
88 |
| -- `removeListener(event: string)`: 移除指定事件的所有监听器。 |
89 |
| -- `removeAllListeners()`: 移除所有事件监听器。 |
90 |
| - |
91 |
| -# 配置选项(Options) |
92 |
| - |
93 |
| -- `url: string`:WebSocket 服务器地址。必需。 |
94 |
| -- `timeout?: number`:连接超时时间(毫秒),默认 `5000`。 |
95 |
| -- `reconnect?: boolean`:是否自动重连,默认 `true`。 |
96 |
| -- `reconnectInterval?: number`:重连间隔(毫秒),默认 `5000`。 |
97 |
| -- `reconnectMaxInterval?: number`:最大重连间隔(毫秒),默认 `10000`。 |
98 |
| -- `reconnectMaxTimes?: number`:最大重连次数,默认为 0 不限制。 |
99 |
| -- `uniqueKey?: string`:每条消息携带的唯一标识符,默认为 `message_id`。 |
100 |
| -- `cacheMessage?: boolean`:是否缓存发送失败的消息,默认为 `false`。 |
101 |
| -- `maxCacheMessage?: number`:缓存消息的最大数量,默认为 `100`。 |
102 |
| - |
103 | 87 | # 贡献
|
104 | 88 |
|
105 |
| -如果你希望为这个项目做出贡献,请在 GitHub 上提交 [Issues](https://github.com/coderlzw-cn/client-ws/issues) |
106 |
| -或 [Pull Requests](https://github.com/coderlzw-cn/client-ws/pulls)。 |
| 89 | +如果你希望为这个项目做出贡献,请在 GitHub 上提交 [Issues](https://github.com/coderlzw-cn/client-ws/issues) 或 [Pull Requests](https://github.com/coderlzw-cn/client-ws/pulls)。 |
107 | 90 |
|
108 | 91 | # 许可证
|
109 | 92 |
|
110 |
| -该项目使用 MIT 许可证 - 详情请参阅 [LICENSE](https://github.com/coderlzw-cn/client-ws/blob/main/LICENSE) 文件。 |
| 93 | +该项目使用 MIT 许可证 - 详情请参阅 [LICENSE](https://github.com/coderlzw-cn/client-ws/blob/main/LICENSE) 文件。 |
0 commit comments