91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

paho-mqtt模塊實戰(zhàn)

科技綠洲 ? 來源:TinyZ ? 作者:TinyZ ? 2023-09-20 11:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳輸協(xié)議,它被設(shè)計用于低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的物聯(lián)網(wǎng)設(shè)備通信。Rust是一種安全、并發(fā)和高效的編程語言,它在系統(tǒng)編程和網(wǎng)絡(luò)編程方面有著很好的表現(xiàn)。在本教程中,我們將介紹如何使用Rust語言和paho-mqtt模塊實現(xiàn)MQTT協(xié)議的應(yīng)用。

前面寫過3篇介紹 rumqttc 的教程,本篇開始使用 paho-mqtt 模塊是c庫的封裝, 支持v5協(xié)議,qos 2等更復(fù)雜的特性。

環(huán)境準(zhǔn)備

我們需要先安裝好相關(guān)的開發(fā)環(huán)境。在Cargo.toml中添加依賴:

paho-mqtt = "0.12.1"

連接MQTT服務(wù)器

在使用MQTT協(xié)議之前,我們需要先連接到MQTT服務(wù)器。以下是連接MQTT服務(wù)器的示例代碼:

extern crate paho_mqtt as mqtt;

fn main() {
    let host = "tcp://localhost:1883";
    let cli = mqtt::Client::new(host).unwrap();
    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);
}

在上面的示例代碼中,我們首先創(chuàng)建了一個MQTT客戶端對象,并指定了MQTT服務(wù)器的地址。然后,我們創(chuàng)建了一個連接選項對象,并設(shè)置了心跳間隔和會話清除標(biāo)志。最后,我們使用連接選項對象連接到MQTT服務(wù)器,并打印連接響應(yīng)信息。

發(fā)布MQTT消息

在連接到MQTT服務(wù)器之后,我們可以使用MQTT客戶端對象來發(fā)布消息。以下是發(fā)布MQTT消息的示例代碼:

extern crate paho_mqtt as mqtt;

fn main() {
    let host = "tcp://localhost:1883";
    let cli = mqtt::Client::new(host).unwrap();
    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);

    let topic = "test/topic";
    let payload = "Hello, MQTT!";
    let message = mqtt::MessageBuilder::new()
        .topic(topic)
        .payload(payload)
        .qos(mqtt::QOS_1)
        .finalize();
    let response = cli.publish(message).unwrap();
    println!("Published MQTT message: {:?}", response);
}

在上面的示例代碼中,我們首先連接到MQTT服務(wù)器,然后創(chuàng)建了一個MQTT消息對象,并設(shè)置了消息主題、消息負載和消息服務(wù)質(zhì)量等級。最后,我們使用MQTT客戶端對象來發(fā)布消息,并打印發(fā)布響應(yīng)信息。

訂閱MQTT主題

在使用MQTT協(xié)議之前,我們需要先訂閱MQTT主題。以下是訂閱MQTT主題的示例代碼:

extern crate paho_mqtt as mqtt;

fn main() {
    let host = "tcp://localhost:1883";
    let cli = mqtt::Client::new(host).unwrap();
    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);

    let topic = "test/topic";
    let qos = mqtt::QOS_1;
    let response = cli.subscribe(topic, qos).unwrap();
    println!("Subscribed to MQTT topic: {:?}", response);
}

在上面的示例代碼中,我們首先連接到MQTT服務(wù)器,然后創(chuàng)建了一個MQTT訂閱對象,并設(shè)置了訂閱主題和服務(wù)質(zhì)量等級。最后,我們使用MQTT客戶端對象來訂閱主題,并打印訂閱響應(yīng)信息。

同時發(fā)布和訂閱MQTT消息

在使用MQTT協(xié)議時,我們通常需要同時發(fā)布和訂閱MQTT消息。以下是同時發(fā)布和訂閱MQTT消息的示例代碼:

extern crate paho_mqtt as mqtt;

fn main() {
    let host = "tcp://localhost:1883";
    let cli = mqtt::Client::new(host).unwrap();
    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);

    let topic = "test/topic";
    let qos = mqtt::QOS_1;
    let response = cli.subscribe(topic, qos).unwrap();
    println!("Subscribed to MQTT topic: {:?}", response);

    let payload = "Hello, MQTT!";
    let message = mqtt::MessageBuilder::new()
        .topic(topic)
        .payload(payload)
        .qos(mqtt::QOS_1)
        .finalize();
    let response = cli.publish(message).unwrap();
    println!("Published MQTT message: {:?}", response);

    for message in cli.start_consuming() {
        println!("Received MQTT message: {:?}", message);
    }
}

在上面的示例代碼中,我們首先連接到MQTT服務(wù)器,然后創(chuàng)建了一個MQTT訂閱對象,并設(shè)置了訂閱主題和服務(wù)質(zhì)量等級。接著,我們創(chuàng)建了一個MQTT消息對象,并使用MQTT客戶端對象來發(fā)布消息。最后,我們使用MQTT客戶端對象來接收消息,并打印接收到的消息。

斷開MQTT服務(wù)器連接

在使用MQTT協(xié)議之后,我們需要斷開與MQTT服務(wù)器的連接。以下是斷開MQTT服務(wù)器連接的示例代碼:

extern crate paho_mqtt as mqtt;

fn main() {
    let host = "tcp://localhost:1883";
    let cli = mqtt::Client::new(host).unwrap();
    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);

    cli.disconnect(None).unwrap();
    println!("Disconnected from MQTT server.");
}

在上面的示例代碼中,我們首先連接到MQTT服務(wù)器,然后使用MQTT客戶端對象來斷開與MQTT服務(wù)器的連接,并打印斷開連接信息。

進階使用

在本節(jié)中,我們將介紹如何使用Rust語言和paho-mqtt模塊實現(xiàn)MQTT協(xié)議的進階應(yīng)用。我們將提供2個示例,分別是:

    1. 使用SSL/TLS連接MQTT服務(wù)器
    1. 使用認證機制連接MQTT服務(wù)器

使用SSL/TLS連接MQTT服務(wù)器

在使用MQTT協(xié)議時,我們通常需要使用SSL/TLS協(xié)議來保證通信安全。以下是使用SSL/TLS連接MQTT服務(wù)器的示例代碼:

extern crate paho_mqtt as mqtt;
extern crate rustls;

use std::fs::File;
use std::io::BufReader;
use std::sync::Arc;

fn main() {
    let host = "ssl://localhost:8883";
    let cli = mqtt::Client::new(host).unwrap();

    let mut config = rustls::ClientConfig::new();
    let cert_file = &mut BufReader::new(File::open("cert.pem").unwrap());
    config.root_store.add_pem_file(cert_file).unwrap();
    let tls = Arc::new(rustls::ClientSession::new(&Arc::new(config), host));

    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .ssl_options(mqtt::SslOptionsBuilder::new()
            .ssl_version(mqtt::SslVersion::TlsV1_2)
            .server_name_indication(host)
            .build(tls))
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);
}

在上面的示例代碼中,我們首先創(chuàng)建了一個MQTT客戶端對象,并指定了使用SSL/TLS協(xié)議連接MQTT服務(wù)器的地址。然后,我們創(chuàng)建了一個SSL/TLS配置對象,并從PEM文件中加載證書。接著,我們創(chuàng)建了一個SSL/TLS會話對象,并使用SSL/TLS配置對象和MQTT服務(wù)器地址來初始化會話對象。最后,我們創(chuàng)建了一個連接選項對象,并設(shè)置了心跳間隔、SSL/TLS選項和會話清除標(biāo)志。我們使用連接選項對象連接到MQTT服務(wù)器,并打印連接響應(yīng)信息。

使用認證機制連接MQTT服務(wù)器

在使用MQTT協(xié)議時,我們通常需要使用認證機制來保證通信安全。以下是使用認證機制連接MQTT服務(wù)器的示例代碼:

extern crate paho_mqtt as mqtt;

fn main() {
    let host = "tcp://localhost:1883";
    let cli = mqtt::Client::new(host).unwrap();

    let username = "user";
    let password = "password";
    let conn_opts = mqtt::ConnectOptionsBuilder::new()
        .keep_alive_interval(std::time::Duration::from_secs(20))
        .user_name(username)
        .password(password)
        .clean_session(false)
        .finalize();
    let response = cli.connect(conn_opts).unwrap();
    println!("Connected to MQTT server: {:?}", response);
}

在上面的示例代碼中,我們首先創(chuàng)建了一個MQTT客戶端對象,并指定了MQTT服務(wù)器的地址。然后,我們創(chuàng)建了一個連接選項對象,并設(shè)置了心跳間隔、用戶名、密碼和會話清除標(biāo)志。我們使用連接選項對象連接到MQTT服務(wù)器,并打印連接響應(yīng)信息。

總結(jié)

在本教程中,我們介紹了如何使用Rust語言和paho-mqtt模塊實現(xiàn)MQTT協(xié)議的應(yīng)用。我們提供了幾個基礎(chǔ)應(yīng)用的示例代碼,包括連接MQTT服務(wù)器、發(fā)布MQTT消息、訂閱MQTT主題、同時發(fā)布和訂閱MQTT消息和斷開MQTT服務(wù)器連接。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2788

    瀏覽量

    50343
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7814

    瀏覽量

    90912
  • 傳輸協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    79

    瀏覽量

    11733
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    682

    瀏覽量

    23706
  • rust語言
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    3145
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何使用Rust語言和paho-mqtt模塊實現(xiàn)MQTT協(xié)議

    MQTT是一種輕量級的消息傳輸協(xié)議,它被廣泛應(yīng)用于物聯(lián)網(wǎng)和機器對機器通信領(lǐng)域。Rust是一種安全、高效、并發(fā)的編程語言,它的生態(tài)系統(tǒng)也在不斷壯大。本教程將介紹如何使用Rust語言和paho-mqtt
    的頭像 發(fā)表于 09-19 14:41 ?2314次閱讀

    如何在鴻蒙系統(tǒng)中移植 Paho-MQTT 實現(xiàn)MQTT協(xié)議

    3方軟件包 paho mqtt去實現(xiàn)MQTT協(xié)議功能,最后會給出測試驗證。為后續(xù)的物聯(lián)網(wǎng)項目打好基礎(chǔ)。友情預(yù)告,本節(jié)內(nèi)容較多,源碼也貼出來了,大家最好先看一遍,然后再操作一次。相關(guān)源碼已經(jīng)打包上傳,順便上傳了一個測試OK的固件,
    發(fā)表于 10-23 22:57

    【HarmonyOS HiSpark Wi-Fi IoT套件】如何在鴻蒙系統(tǒng)中移植 Paho-MQTT 實現(xiàn)MQTT協(xié)議

    一款專為IoT應(yīng)用場景打造的芯片。本節(jié)主要講如何在鴻蒙系統(tǒng)中通過移植第3方軟件包 paho mqtt去實現(xiàn)MQTT協(xié)議功能,最后會給出測試驗證。為后續(xù)的物聯(lián)網(wǎng)項目打好基礎(chǔ)。友情預(yù)告,本節(jié)內(nèi)容較多,源碼
    發(fā)表于 11-03 17:41

    【直播預(yù)熱】Harmony MQTT/CoAP應(yīng)用指南——火熱報名中

    分析鴻蒙MQTT/CoAP應(yīng)用1) 鴻蒙MQTT應(yīng)用指南2) 鴻蒙CoAP應(yīng)用指南 直播講解知識點:1. MQTT1)MQTT協(xié)議和相關(guān)開源項目簡介1)移植
    發(fā)表于 12-09 17:18

    Harmony MQTT/CoAP應(yīng)用指南 【直播答疑】:參與直播的小伙伴們,如果您有任何疑問,可在我們電子發(fā)燒友論壇發(fā)帖提問

    請注意,請使用固定的發(fā)帖標(biāo)題格式,如:【直播提問-許思維老師12/15】如何移植paho-mqtt到鴻蒙?,以便許老師和潤和技術(shù)團隊能第一時間發(fā)現(xiàn)您的帖子,予以回復(fù)哦。
    發(fā)表于 12-16 13:49

    如何使用paho-mqtt框架實現(xiàn)溫濕度數(shù)據(jù)的實時顯示?

    如何使用paho-mqtt實框架現(xiàn)溫濕度數(shù)據(jù)的實時顯示?
    發(fā)表于 10-08 09:12

    基于Eclipse paho-mqtt源碼包的MQTT客戶端設(shè)計(上)

    MQTT 軟件包介紹Paho MQTT 是 Eclipse 實現(xiàn)的 MQTT 協(xié)議的客戶端,本軟件包是在 Eclipse paho-mqtt
    發(fā)表于 08-04 16:28

    基于Eclipse paho-mqtt源碼包的MQTT客戶端設(shè)計(下)

    packages → IoT - internet of things 中選擇 Paho MQTT 軟件包,操作界面如下圖所示:開啟功能示例,便于測試 MQTT 功能:配置項介紹如下:---
    發(fā)表于 08-04 16:33

    新手求助MQTT選擇哪個軟件包比較合適呢?

    大概看了下當(dāng)前有 umqtt、umqtt 和 paho-mqtt 幾個軟件包,除了貌似 paho 的那個比較拉跨,其他的兩個有什么優(yōu)劣么?另外,內(nèi)網(wǎng)環(huán)境下面的 MQTT 的傳輸延遲一般是多少(QoS0/1/2)?性能能到多少?(
    發(fā)表于 11-17 10:21

    paho-mqtt重連后AT發(fā)送會報錯是什么原因?

    如下圖代碼中使用mqtt_stop后再開啟mqtt_start,前幾條數(shù)據(jù)還能發(fā)出去,但是過一會AT發(fā)送數(shù)據(jù)就會出問題,會導(dǎo)致mqtt再次下線重連,使用的RTT版本為4.0.2,mqtt
    發(fā)表于 01-10 15:39

    paho在OneNET平臺的應(yīng)用

    apiKey,為字符串 安裝 sudo pip install paho-mqtt 關(guān)于paho的使用參考:https://pypi.python.org/pypi/paho-mqtt/1.3.0 實現(xiàn)功能: 平臺下發(fā)的數(shù)據(jù),會
    發(fā)表于 12-04 18:57 ?2次下載

    在鴻蒙系統(tǒng)中移植Paho-MQTT實現(xiàn)MQTT協(xié)議的詳細教程

    系統(tǒng)中通過移植第 3 方軟件包 Paho-MQTT 去實現(xiàn) MQTT 協(xié)議功能,最后會給出測試驗證。為后續(xù)的物聯(lián)網(wǎng)項目打好基礎(chǔ)。 友情預(yù)告,本節(jié)內(nèi)容較多,源碼也貼出來了,大家最好先看一遍,然后再操作一次。 相關(guān)源碼已經(jīng)打包上傳,順便上傳了一個測試 OK 的固件,大家可以直
    的頭像 發(fā)表于 10-24 11:05 ?8141次閱讀
    在鴻蒙系統(tǒng)中移植<b class='flag-5'>Paho-MQTT</b>實現(xiàn)<b class='flag-5'>MQTT</b>協(xié)議的詳細教程

    【Linux篇】Paho-MQTT-C移植

    【Linux篇】Paho-MQTT-C移植
    的頭像 發(fā)表于 05-05 09:05 ?3873次閱讀

    如何在Python中使用MQTT

    本文主要介紹如何在 Python 項目中使用?paho-mqtt?客戶端庫 ,實現(xiàn)客戶端與?MQTT?服務(wù)器的連接、訂閱、取消訂閱、收發(fā)消息等功能。
    的頭像 發(fā)表于 12-22 10:41 ?1.1w次閱讀
    如何在Python中使用<b class='flag-5'>MQTT</b>

    通過paho-mqtt軟件包入門rt-thread的sal

    在rt_wlan_register_event_handler函數(shù)注冊好RT_WLAN_EVT_READY的回調(diào)函數(shù)paho_mqtt_start,當(dāng)wifi準(zhǔn)備好后調(diào)用mq_start啟動mqtt
    的頭像 發(fā)表于 08-09 15:37 ?1867次閱讀
    主站蜘蛛池模板: www.天天色| 97人人模人人揉人人捏 | 欧美a色| 美女鲜嫩bbbb | 成年网站在线播放 | 91在线免费看 | 人与牲动交xxxxbbb | 天堂在线网站 | 噜噜噜久久久 | 日本一区二区视频在线观看 | 手机福利在线 | 4hc44www四虎永久 | 国内一国产农村妇女一级毛片 | 特黄特黄aaaa级毛片免费看 | 国产情侣真实露脸在线最新 | 五月激情婷婷综合 | 人人澡人人添 | 加勒比日本道 | 女人张开腿给人桶免费视频 | 久久精品夜夜夜夜夜久久 | 亚洲一区二区三 | 免费在线观看视频 | 你懂的网址在线观看 | 精品伊人久久大线蕉地址 | 小视频国产 | 97精品伊人久久大香线蕉 | semm亚洲欧美在线高清 | 日b毛片| 亚洲激情视频 | 亚洲狼色专区 | 天天干夜夜夜 | 在线视频观看你懂的 | 日韩三级一区 | 草久视频在线观看 | 福利视频第一区 | 新版天堂中文网 | 高清一区二区 | 久久香蕉国产线看观看精品yw | 奇米视频7777| 亚洲黄色激情网 | 精品无码中出一区二区 |