RxWS 评价来了(基于最新 1.1.0 版本)

6 阅读1分钟

✅ RxWS 评价来了(基于最新 1.1.0 版本)

安装 flutter pub add rxws

总体评价

RxWS 是一个非常新的 WebSocket 库,定位是轻量、高性能、纯 Dart 的 WebSocket 客户端

核心亮点

  • 轻量:专为 Flutter/Dart 设计,API 非常简洁
  • 功能实用
    • 自动重连(Auto-reconnection)
    • 心跳 / Ping-Pong 机制
    • 支持 Text 和 JSON 消息
    • 清晰的 Stream API(onOpenonMessageonErroronClose
  • 跨平台: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 的响应式变量)。