如何在Rust中使用MQTT

本文介绍了如何在Rust项目中利用paho-mqtt库连接到MQTT代理,进行消息发布和订阅。详细阐述了从项目初始化、选择客户端库、配置连接参数,到编写连接、发布和订阅代码的全过程,适用于物联网和后端开发人员。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Rust是一种多范式编程语言,旨在提供性能和安全性,尤其擅长处理安全的并发编程。Rust在语法上类似于C++,但通过使用借用检查器来验证引用,可以保证内存安全。Rust可以在不使用垃圾回收的情况下实现内存安全,而引用计数是可选的。

MQTT是一种基于发布/订阅模型的轻量级物联网(IoT)消息传递协议。它可以使用很少的代码和带宽,为网络设备提供实时可靠的消息服务。此外,它广泛应用于物联网、移动互联网、智能硬件、智能汽车、电力和能源等行业。

本文主要介绍了如何在Rust项目中使用paho-mqtt客户端库,以及如何在客户端和MQTT代理之间实现连接、订阅、消息传递和取消订阅等功能。

目录

1.项目初始化

2.选择MQTT客户端库

3.初始化项目

4.Rust中使用MQTT

创建客户端连接

配置MQTT代理连接参数

编写MQTT连接代码 

发布消息

订阅

5.完整代码

6.运行和测试

编译二进制文件

消息订阅

消息发布

7.总结


1.项目初始化

本项目使用Rust 1.75.0-nightly进行开发和测试,并使用Cargo 1.75.0-nightly包管理工具进行管理,读者可以使用以下命令检查当前的Rust版本。

(base) MacBook-Pro:hello-rust apple$ rustc --version
rustc 1.75.0-nightly (cae0791da 2023-10-05)

2.选择MQTT客户端库

paho-mqtt是当前Rust中最灵活和广泛使用的MQTT客户端库。最新版本0.7.1支持MQTT v5、3.1.1、3.1,还支持通过标准TCP、SSL / TLS、WebSockets进行数据传输,并提供了对QoS 0、1、2等的支持。

3.初始化项目

执行以下命令以创建一个名为mqtt-example的新Rust项目。

~ cargo new mqtt-example
    Created binary (application) `mqtt-example` package

编辑项目中的Cargo.toml文件,并将paho-mqtt库的地址添加到依赖项中,并指定与订阅和发布代码文件对应的二进制文件。

[dependencies]
paho-mqtt = { git = "https://github.com/eclipse/paho.mqtt.rust.git", branch = "master" }

[[bin]]
name = "sub"
path = "src/sub/main.rs"

[[bin]]
name = "pub"
path = "src/pub/main.rs"

4.Rust中使用MQTT

创建客户端连接

本文将使用由EMQX提供的免费公共MQTT代理作为测试连接的MQTT代理。此服务基于EMQX的MQTT云服务创建。服务器访问信息如下:

  • 代理服务器:broker.emqx.io
  • TCP端口:1883
  • Websocket端口:8083

配置MQTT代理连接参数

配置MQTT代理连接地址(包括端口)、主题(这里我们配置了两个主题)以及客户端ID。

const DFLT_BROKER:&str = "tcp://broker.emqx.io:1883";
const DFLT_CLIENT:&str = "rust_publish";
const DFLT_TOPICS:&[&str] = &["rust/mqtt", "rust/test"];

编写MQTT连接代码 

编写MQTT连接代码,连接地址可以在执行二进制文件时作为命令行参数传递,以提高用户体验。通常,我们需要创建一个客户端,然后将其连接到broker.emqx.io。

let host = env::args().nth(1).unwrap_or_else(||
    DFLT_BROKER.to_string()
);

// Define the set of opti
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星际编程喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值