#mqtt-client #mqtt #client #mosquitto #pubsub

mosquitto-client-wrapper

Rust 接口到 Mosquitto MQTT 代理客户端。这是对 https://github.com/jsloth/mosquitto-client 的分支。

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 中使用

MIT 许可证

44KB
792

到 Mosquitto MQTT 代理客户端的 Rust 接口

build Crates.io

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_disconnectloop_forever 的相关方法,如果没有错误显式地从代理断开连接,它将结束。

功能

捆绑(默认开启)

此功能将自动下载和构建 mosquitto 客户端库。默认情况下,采用主分支。这可以通过以下变量重写。

交叉编译

库可以交叉编译。以下环境参数必须设置以实现交叉编译

  • MOSQUITTO_CROSS_COMPILER 默认无,例如 arm-linux-gnueabihf-
  • MOSQUITTO_CC 默认 gcc

无运行时依赖

~185KB