11 个版本
使用旧的 Rust 2015
0.3.1 | 2021 年 1 月 5 日 |
---|---|
0.3.0 | 2021 年 1 月 5 日 |
0.2.7 | 2021 年 1 月 3 日 |
0.2.5 | 2020 年 12 月 28 日 |
0.1.6 | 2020 年 12 月 26 日 |
#3 in #mosquitto
在 cerk_port_mqtt_mosquitto 中使用
44KB
792 行
到 Mosquitto MQTT 代理客户端的 Rust 接口
Mosquitto 是一个流行的 C 语言实现的 MQTT 代理。尽管有纯 Rust MQTT 客户端,但仍有一个连接到 Mosquitto 客户端的绑定是有用的。
基本的故事是连接到代理,订阅 您感兴趣的主题,并在特定的主题上发布消息。消息可以是任意字节数据,但此实现确实需要主题本身是 UTF-8。C API 基于回调,这些回调映射到 Rust 闭包。
Mosquitto 客户端是线程安全的,因此您可以从一个线程发布,并在另一个线程上监听消息。此示例演示了 mosquitto-client 的使用。
extern crate mosquitto_client_wrapper as mosq;
use mosq::Mosquitto;
use std::{thread, time};
fn main() {
let m = Mosquitto::new("test");
m.connect("localhost",1883,5).expect("can't connect");
m.subscribe("bilbo/#",1).expect("can't subscribe to bonzo");
let mt = m.clone();
thread::spawn(move || {
let timeout = time::Duration::from_millis(500);
for _ in 0..5 {
mt.publish("bilbo/baggins","hello dolly".as_bytes(), 1, false).unwrap();
thread::sleep(timeout);
}
mt.disconnect().unwrap();
});
let mut mc = m.callbacks(0);
mc.on_message(|data,msg| {
println!("bilbo {:?}",msg);
*data += 1;
});
m.loop_until_disconnect(200).expect("broken loop");
println!("received {} messages",mc.data);
}
Mosquitto
结构是一个围绕我们从客户端获得的 C 指针的薄包装。它是 Clone + Send + Sync
,因此我们可以将其传递给一个线程,该线程简单地发布一些字节并等待;在线程结束时,我们显式地断开连接。
Callbacks
处理器结构是独立的,以避免激怒借用检查器。它由 callbacks
方法创建,并对其数据(作为 data
字段访问)进行泛型处理。每当发生事件时,回调将传递对该数据的可变引用和特定于事件的数据——在这种情况下是一个消息结构。
loop_until_disconnect
是 loop_forever
的相关方法,如果没有错误显式地从代理断开连接,它将结束。
功能
捆绑(默认开启)
此功能将自动下载和构建 mosquitto 客户端库。默认情况下,采用主分支。这可以通过以下变量重写。
MOSQUITTO_GIT_URL
Git仓库的URL;默认为https://github.com/eclipse/mosquitto.gitMOSQUITTO_GIT_HASH
构建时检查出的Git哈希;默认为无
交叉编译
库可以交叉编译。以下环境参数必须设置以实现交叉编译
MOSQUITTO_CROSS_COMPILER
默认无,例如arm-linux-gnueabihf-
MOSQUITTO_CC
默认gcc
无运行时依赖
~185KB