✅ RxWS 评价来了(基于最新 1.1.0 版本)
安装 flutter pub add rxws
总体评价
RxWS 是一个非常新的 WebSocket 库,定位是轻量、高性能、纯 Dart 的 WebSocket 客户端。
核心亮点
- 轻量:专为 Flutter/Dart 设计,API 非常简洁
- 功能实用:
- 自动重连(Auto-reconnection)
- 心跳 / Ping-Pong 机制
- 支持 Text 和 JSON 消息
- 清晰的 Stream API(
onOpen、onMessage、onError、onClose)
- 跨平台:Android、iOS、Web、Windows、macOS、Linux 全支持
- 使用体验友好:比原生
web_socket_channel用起来更方便
官方 Example 代码(已优化整理)
import 'package:flutter/material.dart';
import 'package:rxws/rxws.dart';
class WSPage extends StatefulWidget {
const WSPage({super.key});
@override
State<WSPage> createState() => _WSPageState();
}
class _WSPageState extends State<WSPage> {
final ws = createWsClient(); // 创建客户端
final List<String> messages = [];
@override
void initState() {
super.initState();
// 连接成功
ws.onOpen.listen((_) {
print('✅ WebSocket 已连接');
ws.send('Hello from Flutter!');
});
// 接收消息
ws.onMessage.listen((message) {
setState(() {
messages.add('收到: $message');
});
});
// 错误处理
ws.onError.listen((error) {
print('❌ 错误: $error');
});
// 连接关闭
ws.onClose.listen((_) {
print('🔌 连接已关闭');
});
// 开始连接
ws.connect('wss://echo.websocket.events'); // 测试地址
}
@override
void dispose() {
ws.disconnect();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('RxWS 示例')),
body: ListView.builder(
itemCount: messages.length,
itemBuilder: (context, index) => ListTile(title: Text(messages[index])),
),
floatingActionButton: FloatingActionButton(
onPressed: () => ws.send('Ping ${DateTime.now()}'),
child: const Icon(Icons.send),
),
);
}
}
与其它方案对比
| 方案 | 轻量程度 | 自动重连 | 心跳 | API 简洁度 | 推荐场景 |
|---|---|---|---|---|---|
| rxws(新) | ★★★★★ | ✅ | ✅ | ★★★★★ | 想轻量 + 好用的项目 |
| web_socket_channel | ★★★★ | ❌ | ❌ | ★★★ | 简单需求 |
| socket_io_client | ★★★ | ✅ | ✅ | ★★★★ | 需要 Socket.io 协议 |
| RxDart + 原生 | ★★★ | 需自写 | 需自写 | ★★ | 极致流控需求 |
我的建议
- 值得尝试:如果你正在找一个简单好用的 WebSocket 方案,RxWS 是目前不错的选择。
- 注意事项:
- 包非常新(刚发布),可能还有隐藏 Bug,生产环境建议先充分测试。
- 文档还比较简单,API 参考为主。
- 目前没有和 RxFlare 直接集成,但你可以轻松结合使用(把
ws.onMessage接入 RxFlare 的响应式变量)。