4 个版本

使用旧的 Rust 2015

0.1.5 2018 年 9 月 1 日
0.1.4 2018 年 1 月 23 日
0.1.3 2018 年 1 月 21 日
0.1.2 2018 年 1 月 11 日

#5 in #mosquitto

Download history 501/week @ 2023-11-20 472/week @ 2023-11-27 302/week @ 2023-12-04 160/week @ 2023-12-11 136/week @ 2023-12-18 166/week @ 2023-12-25 224/week @ 2024-01-01 460/week @ 2024-01-08 666/week @ 2024-01-15 922/week @ 2024-01-22 496/week @ 2024-01-29 411/week @ 2024-02-05 417/week @ 2024-02-12 371/week @ 2024-02-19 366/week @ 2024-02-26 388/week @ 2024-03-04

1,547 每月下载量

MIT 许可证

37KB
650

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

Mosquitto 是用 C 实现的流行 MQTT 代理。尽管有纯 Rust MQTT 客户端,但仍然需要与 Mosquitto 客户端绑定。

基本思路是连接到代理,订阅感兴趣的主题,并在特定主题上发布消息。消息可以是任意字节,但此实现确实要求主题本身是 UTF-8。C API 基于回调,这些回调映射到 Rust 闭包。

Mosquitto 客户端是线程安全的,因此您可以从一个线程发布消息,并在另一个线程上监听消息。此示例演示了 mosquitto-client 的使用

extern crate mosquitto_client as mosq;
use mosq::Mosquitto;
use std::{thread, time};

fn main() {
    let m = Mosquitto::new("test");

    m.connect("localhost",1883).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 的相关函数,在显式从代理断开连接时无错误地结束。

先决条件

在 Debian/Ubuntu 系统上,需要安装客户端库 libmosquitto1(不需要开发包)。(在基于 RPM 的系统上,只需 libmosquitto 即可)。

您还需要代理 mosquitto 软件包进行测试。

对于 MacOS,Mosquitto 通过 brew 提供

brew install mosquitto

无运行时依赖