Flutter NATS客户端插件nats_client的使用
Flutter NATS客户端插件nats_client的使用
NATS 是一个开源的消息系统(有时也称为面向消息的中间件)。NATS 服务器是用 Go 编程语言编写的。NATS 客户端通过 NATS 交换系统提供了客户端设备(如 Android、iPhone、iPad、Web 浏览器和桌面应用程序)与服务器之间的通信。它支持使用 SSL/TLS 的安全层协议。
初始化项目
flutter create --project-name nats_client -i objc -a java -t app .
实现
使用 NatsLight 库 (jwt bearer token)
import 'dart:convert';
import 'package:nats_client/natslite/nats.dart';
import 'package:nats_client/natslite/subscription.dart';
// 创建连接
final conn = await Nats.connect(
opts: { 'servers': server, 'token': token},
debug: true,
statusCallback: (status, error) {
print('$status (${error.toString()})');
});
// 订阅频道
conn.subscribe('chat', (Result result) {
print(result.data);
});
// 发布消息
conn.publish('enter', utf8.encode(json.encode({'id': myId})));
使用 JWT 认证
import 'package:nats_client/natslite/nats.dart';
import 'package:nats_client/natslite/constants.dart';
import 'package:nats_client/natslite/subscription.dart';
const token = 'CREATE_USER_TOKEN - nsc add user --bearer --name <n>';
late Nats conn;
// 创建连接
conn = Nats(opts: {}, debug: true,
statusCallback: (status, error) async {
if (error != null) {
print('NetService:ERROR $error');
}
if (status == Status.PING_TIMER) {
print(status.toString());
} else if (status == Status.CONNECT) {
// 同步请求
final msg = await conn.request('/test/notifications', utf8.encode(json.encode({})));
print(json.decode(utf8.decode(msg)));
// 订阅频道
conn.subscribe('/test/notifications/stream', (Result res) {
print(utf8.decode(res.data));
});
}
});
// 设置 JWT 认证
conn.authenticator.auth = (String nonce) {
return {'jwt': token, 'nkey': '', 'sig': ''};
};
// 初始化连接
conn.init('wss://{{SERVER}}');
使用 NATS 认证器
使用 JwtAuthenticator
import 'package:nats_client/natslite/nats.dart';
import 'package:nats_client/nats/jwtauth.dart';
final conn = await Nats.connect(
opts: { 'servers': server },
authenticator: JwtAuthenticator(token),
// 其他配置项
);
使用 UserAuthenticator
import 'package:nats_client/natslite/nats.dart';
import 'package:nats_client/nats/userauth.dart';
final conn = await Nats.connect(
opts: { 'servers': server },
authenticator: UserAuthenticator(login_auth_token),
// 其他配置项
);
使用 NKeyAuthenticator
import 'package:nats_client/natslite/nats.dart';
import 'package:nats_client/nats/userauth.dart';
final conn = await Nats.connect(
opts: { 'servers': server },
authenticator: NKeyAuthenticator('SUAOMTSAOJJNB5TIPMYC5W2OMXDS6ST3Z3PDLDJHCMTGV7SKWVPDL2OU3Y'),
// 其他配置项
);
使用 CredsAuthenticator
import 'package:nats_client/natslite/nats.dart';
import 'package:nats_client/nats/credauth.dart';
final conn = await Nats.connect(
opts: { 'servers': server },
authenticator: CredsAuthenticator(certificate),
// 其他配置项
);
安装 NGS 和 NSC 工具
下载并安装工具
$ curl https://downloads.synadia.com/ngs/install.py -sSf | python
这将把 nsc
和 ngs
工具安装到 ~/.nsc/bin
目录下。可以通过执行 ngs -h
或 nsc -h
来获取帮助信息。
配置 NSC 并创建账户
$ nsc init -o synadia -n First
验证生成的环境变量、JWT、账户、用户和密钥
nsc env
nsc describe jwt -f ~/.local/share/nats/nsc/stores/synadia/synadia.jwt
nsc describe account or nsc list accounts
nsc describe user or nsc list users
tree ~/.local/share/nats/nsc/keys/keys or nsc list keys
(Where Account Key: nsc list keys -a)
(Where User Key: nsc list keys -u)
ngs status -d ~/.local/share/nats/nsc/stores/synadia
> Other... (ENTER)
path to signer account nkey or nkey ~/.local/share/nats/nsc/keys/keys/A/{KEY_DIR}/KEY_NAME.nk
切换到开发者计划
ngs edit -d ~/.local/share/nats/nsc/stores/synadia/
> Other... (ENTER)
path to signer account nkey or nkey ~/.local/share/nats/nsc/keys/keys/A/{KEY_DIR}/KEY_NAME.nk
> Developer $0.00/month
? Email
> OK
安装 NATS 服务器
下载 NATS 服务器
https://nats.io/download/
创建服务器配置文件
nsc generate config --mem-resolver --config-file {DIR_PATH}/nsc-server.conf
启动服务器
nats-server -c {DIR_PATH}/nsc-server.conf
更多关于Flutter NATS客户端插件nats_client的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter NATS客户端插件nats_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用nats_client
插件的示例代码。这个插件允许你与NATS消息系统进行交互。NATS是一个高性能的简单消息队列系统,用于在分布式系统中传递消息。
首先,确保你已经在pubspec.yaml
文件中添加了nats_client
依赖:
dependencies:
flutter:
sdk: flutter
nats_client: ^最新版本号 # 请替换为当前可用的最新版本号
然后,运行flutter pub get
来获取依赖。
接下来是一个简单的Flutter应用示例,它展示了如何连接到NATS服务器、订阅主题并发布消息。
import 'package:flutter/material.dart';
import 'package:nats_client/nats_client.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _status = 'Not connected';
String _receivedMessage = '';
@override
void initState() {
super.initState();
_connectToNATS();
}
void _connectToNATS() async {
try {
// 创建一个NATS连接选项
var options = ConnectionOptions(
servers: ['nats://localhost:4222'], // 替换为你的NATS服务器地址
);
// 创建NATS连接
var connection = await connect(options);
setState(() {
_status = 'Connected to NATS';
});
// 订阅主题
var subscription = await connection.subscribe('test_subject', (msg) {
setState(() {
_receivedMessage = msg.data.toString();
});
});
// 发布消息
connection.publish('test_subject', 'Hello NATS from Flutter!'.codeUnits);
// 为了保持连接活跃,这里我们简单地延迟一段时间,实际应用中你可能会有其他逻辑
await Future.delayed(Duration(seconds: 10));
// 断开连接
await subscription.unsubscribe();
await connection.close();
setState(() {
_status = 'Disconnected from NATS';
});
} catch (e) {
print('Error connecting to NATS: $e');
setState(() {
_status = 'Error connecting to NATS';
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter NATS Client Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Status: $_status'),
SizedBox(height: 16),
Text('Received Message: $_receivedMessage'),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 创建一个NATS连接选项,指定NATS服务器的地址。
- 使用
connect
函数创建一个NATS连接。 - 订阅一个名为
test_subject
的主题,并在接收到消息时更新UI。 - 发布一条消息到
test_subject
主题。 - 为了保持连接活跃(在实际应用中,你可能会有其他机制来管理连接),我们延迟了10秒,然后取消了订阅并关闭了连接。
- 更新UI以显示连接状态和接收到的消息。
请注意,这个示例代码是为了演示目的而简化的。在实际应用中,你可能需要更复杂的错误处理和资源管理逻辑。此外,确保你的NATS服务器正在运行,并且地址和端口配置正确。