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