3 个不稳定版本
0.2.0 | 2023年3月19日 |
---|---|
0.1.1 | 2023年1月2日 |
0.1.0 | 2023年1月2日 |
#25 in #mqtt-client
每月 29 下载
330KB
4.5K SLoC
LMC - Rust 轻量级 MQTT 客户端
LMC 是一个 MQTT 客户端实现,旨在小巧(包括文档的“活动”代码少于 1k 行),最小化内存分配,尽可能少地使用 crates,并且是异步的(通过 tokio)。该项目采用 MIT 许可证或 Apache 许可证,您可以选择您更喜欢的。
目前市面上有一些现成的 MQTT 客户端 crates,但其中大多数都是 C/C++ 库的包装器,而纯 Rust 的那些则提供了基本的 API,不允许您在订阅主题时等待服务器的响应。这个 crates 让您能够对其所有方面进行精细控制,同时也提供了 无需烦恼、易于使用 的函数,如果您只需要一个不关心性能的 MQTT 客户端。
使用示例
首先,将这个 crate 添加到您的 Cargo.toml
依赖中
[dependencies.lmc]
version = "^0.2"
features = ["tls"] # See below for available features
然后,您可以使用以下代码开始。请注意,此示例假设以下条件
- 您的代理托管在本地机器上
- 您的代理在 8883 端口使用 TLS
- 您的代理证书由系统 CA 存储库中的证书颁发机构签名
- 您可以使用用户名
username
和密码password
登录 - 您可以在
my_topic
主题上订阅和发布
use lmc::{Options, Client, QoS};
#[tokio::main]
async fn main()
{
//You can disable TLS by skipping `.enable_tls().unwrap()`
let mut opts = Options::new("client_id").enable_tls().unwrap();
opts.set_username("username").set_password(b"password");
//Connect to localhost using the default TLS port (8883)
let (client, shutdown_handle) = Client::connect("localhost", opts).await.unwrap();
//Subscribe to 'my_topic' using an unbounded Tokio MPSC channel
let (subscription, sub_qos) = client.subscribe_unbounded("my_topic", QoS::AtLeastOnce).await.unwrap();
println!("Subscribed to topic with QoS {:?}", sub_qos);
client.publish_qos_1("my_topic", b"it works!", false, true).await.unwrap();
let msg = subscription.recv().await.expect("Failed to await message");
println!("Received {}", msg.payload_as_utf8().unwrap());
shutdown_handle.disconnect().await.expect("Could not disconnect gracefully");
}
功能列表
以下功能可以启用/禁用
fxhash
(默认)使用更快的哈希表,归功于 fxhash crateparking_lot
(默认)使用更快的、不会失败的互斥锁,归功于 parking_lot cratetls
(非默认) 用于 TLS 支持dangerous_tls
(非默认) 允许危险 TLS 函数,例如,允许您绕过服务器证书验证
理念
- 依赖项较少:除非能提高性能,否则避免使用crate。尽可能通过特性使依赖项可选。
- 不安全代码:在不安全代码可以轻易证明为安全的前提下,使用不安全代码来提高性能。
缺少的特性
目前,以下特性在LMC中不可用。根据需要,它们可能稍后实现。
- WebSocket传输
- 单个调用/数据包进行多次订阅
依赖项
~3–15MB
~190K SLoC