Dart-NATS

用于 NATS 消息系统的 Dart 客户端。设计用于 Dart 和 Flutter。

Flutter Web 对 WebSocket 的支持

client.connect(Uri.parse('ws://:80'));

Flutter 其他平台对 TCP Socket 和 WebSocket 的支持

client.tcpConnect('localhost');
client.connect(Uri.parse('ws://:80'));

API 变更

为了支持 Flutter Web,我们已将传输方式从 socket 更改为 WebSocket,并且还更改了 API 调用。

Dart 示例

运行 example/main.dart

dart example/main.dart
import 'package:dart_nats/dart_nats.dart';

void main() async {
  var client = Client();
  client.connect(Uri.parse('ws://:80'));
  var sub = client.sub('subject1');
  client.pubString('subject1', 'message1');
  var msg = await sub.stream.first;

  print(msg.string);
  client.unSub(sub);
  client.close();
}

Flutter 示例

导入并声明对象

import 'package:dart_nats/dart_nats.dart' as nats;

  nats.Client natsClient;
  nats.Subscription fooSub, barSub;

简单连接到服务器并订阅主题

  void connect() {
    natsClient = nats.Client();
    natsClient.connect(Uri.parse('wss://demo.nats.io:443');
    fooSub = natsClient.sub('foo');
    barSub = natsClient.sub('bar');
  }

在 StreamBuilder 中用作 Stream

          StreamBuilder(
            stream: fooSub.stream,
            builder: (context, AsyncSnapshot<nats.Message> snapshot) {
              return Text(snapshot.hasData ? '${snapshot.data.string}' : '');
            },
          ),

发布消息

      natsClient.pubString('subject','message string');

处置

  void dispose() {
    natsClient.close();
    super.dispose();
  }

完整的 Flutter 示例代码 example/flutter/main.dart

特点

以下是该客户端目前支持和计划的功能列表

  • [x] - 发布
  • [x] - 订阅,取消订阅
  • [x] - NUID,Inbox
  • [x] - 在连接丢失时重新连接到单个服务器并恢复订阅
  • [x] - 订阅 N 条消息后取消订阅
  • [x] - 请求,响应
  • [x] - 队列订阅
  • [ ] - 缓存,刷新,关闭
  • [x] - 请求超时
  • [ ] - 结构化数据
  • [ ] - 连接选项(集群,超时,ping间隔,最大ping,echo,...)
  • [ ] - 随机自动重连,禁用重连,尝试次数,暂停
  • [ ] - 连接到集群,随机化,根据服务器信息连接失败后自动重连
  • [x] - 事件/状态
  • [ ] - 断开连接处理程序,重连处理程序
  • [x] - 在重连尝试期间缓冲消息
  • [ ] - 所有认证模型,包括 NATS 2.0 JWT 和 seed 密钥
  • [ ] - NATS 2.2

GitHub

https://github.com/chartchuo/dart-nats