在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

rumqttc模塊應用實踐

科技綠洲 ? 來源:TinyZ ? 作者:TinyZ ? 2023-09-20 11:36 ? 次閱讀

MQTT(Message Queuing Telemetry Transport)是一種輕量級的消息傳輸協議,用于在低帶寬和不穩定的網絡環境中傳輸消息。MQTT協議基于發布/訂閱模式,包含了許多特性,如QoS,保留消息,遺囑消息等,使得它非常適合物聯網設備之間的通信。

Rust是一種系統級編程語言,具有內存安全和高性能的特性。Rust語言的主要目標是提供一種安全、并發、實用的編程語言,使得開發者可以輕松地編寫高性能的系統級應用程序。本教程將介紹如何使用Rust語言和rumqttc模塊來實現MQTT協議的基礎應用和進階應用。

rumqttc模塊簡介

rumqttc是一個基于Rust語言實現的MQTT客戶端庫,它提供了連接MQTT服務器、訂閱主題、發布消息等基本功能,并支持TLS加密連接。rumqttc的API簡單易用,適合初學者和中級開發者使用。

在Cargo.toml文件中添加rumqtt模塊依賴, 示例配置如下:

[dependencies]
rumqttc = "0.21.0"

應用實踐進階

使用QoS2傳輸消息

這個示例演示如何使用rumqttc模塊使用QoS2傳輸消息。

use rumqttc::{Client, MqttOptions, QoS};

fn main() {
    let mqtt_options = MqttOptions::new("test-qos2", "localhost", 1883);

    let (mut client, _) = Client::new(mqtt_options, 10);

    client
        .publish("test/topic", QoS::ExactlyOnce, false, "hello world".to_owned())
        .unwrap();
}

這個示例中,我們創建了一個MQTT客戶端,連接到本地的MQTT服務器,然后發布了一條消息到test/topic主題。在調用publish方法時,我們指定了消息的QoS為ExactlyOnce,表示消息必須被傳輸一次,且只能被傳輸一次。

使用連接池

在實際應用中,我們通常需要同時處理多個MQTT客戶端連接,這時候使用連接池可以提高性能和可靠性。rumqttc模塊提供了一個ConnectionPool結構體,可以方便地管理多個MQTT客戶端連接。

use rumqttc::{Client, ConnectionPool, MqttOptions};

fn main() {
    let mqtt_options = MqttOptions::new("test-pool", "localhost", 1883);

    let pool = ConnectionPool::new(mqtt_options, 10);

    let mut clients = Vec::new();

    for _ in 0..10 {
        let client = pool.connect().unwrap();
        clients.push(client);
    }

    // Do something here
}

這個示例中,我們創建了一個MQTT連接池,連接到本地的MQTT服務器。然后我們使用循環創建了10個MQTT客戶端連接,這些連接會自動被管理和回收。

使用多線程

在實際應用中,我們通常需要同時處理多個MQTT消息,這時候使用多線程可以提高性能和可靠性。Rust語言的多線程非常方便,可以使用標準庫中的std::thread模塊來創建線程。

use rumqttc::{Client, MqttOptions, QoS};
use std::thread;

fn main() {
    let mqtt_options = MqttOptions::new("test-thread", "localhost", 1883);

    let (mut client, _) = Client::new(mqtt_options, 10);

    let handle = thread::spawn(move || {
        client
            .publish("test/topic", QoS::AtLeastOnce, false, "hello world".to_owned())
            .unwrap();
    });

    handle.join().unwrap();
}

這個示例中,我們創建了一個MQTT客戶端,連接到本地的MQTT服務器。然后我們使用std::thread::spawn方法創建了一個新線程,這個線程會在后臺發布一條消息到test/topic主題。

持久化存儲消息

通過持久化存儲可以保證消息不會因為程序崩潰或網絡故障而丟失。以下是一個使用SQLite數據庫持久化存儲消息的示例代碼:

use std::thread;
use rumqttc::{Client, MqttOptions, QoS, Event, Packet, Publish, Subscriptions, Qos};

fn main() {
    let mqtt_options = MqttOptions::new("test-7", "localhost", 1883);
    let (mut client, mut connection) = Client::new(mqtt_options, 10);
    let subscriptions = vec![Subscriptions::new("test/topic", QoS::AtLeastOnce)];
    client.subscribe(subscriptions).unwrap();
    let mut storage = Storage::new("mqtt.db").unwrap();
    for event in connection.iter() {
        match event.unwrap() {
            Event::Incoming(Packet::Publish(publish)) = > {
                storage.insert_message(&publish).unwrap();
                println!("Received message: {} from topic: {}", publish.payload, publish.topic_name);
            },
            _ = > {},
        }
    }
}

struct Storage {
    conn: rusqlite::Connection,
}

impl Storage {
    fn new(path: &str) - > rusqlite::Result< Self > {
        let conn = rusqlite::Connection::open(path)?;
        conn.execute("CREATE TABLE IF NOT EXISTS messages (id INTEGER PRIMARY KEY, topic TEXT, payload TEXT, qos INTEGER)", [])?;
        Ok(Self { conn })
    }

    fn insert_message(&mut self, publish: &Publish) - > rusqlite::Result< () > {
        let mut stmt = self.conn.prepare("INSERT INTO messages (topic, payload, qos) VALUES (?, ?, ?)")?;
        stmt.execute(&[&publish.topic_name, &publish.payload, &publish.qos as &i32])?;
        Ok(())
    }
}

其中,Storage結構體使用SQLite數據庫來持久化存儲消息。在Event::Incoming(Packet::Publish(publish))分支中,將接收到的消息插入到數據庫中。

總結

rumqttc模塊是一個非常方便的MQTT客戶端庫,它提供了一系列API,可以方便地實現MQTT協議的功能。本教程作為前一篇的進階補充提供了常見的實際應用場景的應用示例,希望對您進一步深入的了解和掌握物聯網傳輸協議MQTT有所幫助。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2735

    瀏覽量

    47757
  • 傳輸協議
    +關注

    關注

    0

    文章

    79

    瀏覽量

    11493
  • 應用程序
    +關注

    關注

    38

    文章

    3292

    瀏覽量

    57920
  • 物聯網設備
    +關注

    關注

    1

    文章

    235

    瀏覽量

    19833
收藏 人收藏

    評論

    相關推薦

    如何使用Rust語言和rumqttc模塊實現MQTT協議的異步API

    的系統編程語言,非常適合開發物聯網設備和后端服務。本教程將介紹如何使用Rust語言和rumqttc模塊實現MQTT協議的異步API,并提供幾個相關的代碼示例,最佳實踐和教程總結。 本篇內容主要圍繞
    的頭像 發表于 09-19 14:45 ?2522次閱讀

    paho-mqtt模塊實戰

    的編程語言,它在系統編程和網絡編程方面有著很好的表現。在本教程中,我們將介紹如何使用Rust語言和paho-mqtt模塊實現MQTT協議的應用。 前面寫過3篇介紹 rumqttc 的教程,本篇開始使用
    的頭像 發表于 09-20 11:33 ?1402次閱讀

    TFT適配LVGL實踐分享

    1前言說明本章通過FRDM-MCXN947開發板與正點原子的TFTLCD進行實踐1.2模塊介紹硬件:FRDM-MCXN947開發板:該開發板具有豐富的接口詳細可參考NXP官方
    的頭像 發表于 09-04 08:06 ?1751次閱讀
    TFT適配LVGL<b class='flag-5'>實踐</b>分享

    【大語言模型:原理與工程實踐】探索《大語言模型原理與工程實踐》2.0

    《大語言模型“原理與工程實踐”》是關于大語言模型內在機理和應用實踐的一次深入探索。作者不僅深入討論了理論,還提供了豐富的實踐案例,幫助讀者理解如何將理論知識應用于解決實際問題。書中的案例分析有助于
    發表于 05-07 10:30

    C51教程使用技巧與實踐

    C51教程使用技巧與實踐案例額
    發表于 08-24 11:14

    虛幻引擎的紋理最佳實踐

    紋理是游戲不可或缺的一部分。 這是一個藝術家可以直接控制的領域,以提高游戲的性能。 本最佳實踐指南介紹了幾種紋理優化,這些優化可以幫助您的游戲運行得更流暢、看起來更好。 最佳實踐系列指南的總體目標
    發表于 08-28 06:39

    電氣工程實踐-電子實踐教案

    電氣工程實踐-電子實踐教案 實踐教學目標1、掌握元件識別及檢測方法2、掌握儀器儀表使用方法3、掌握設計調試電路方法  
    發表于 05-04 16:35 ?0次下載

    圖形點陣LCD液晶模塊顯示界面的可視化編程方案與實踐

    圖形點陣LCD液晶模塊顯示界面的可視化編程方案與實踐 隨著圖形點陣LCD液晶顯示模塊在各行各業的逐步使用,使得人機界面變得越來越直觀,尤其對于國內大多數需要有
    發表于 11-05 09:16 ?1152次閱讀
    圖形點陣LCD液晶<b class='flag-5'>模塊</b>顯示界面的可視化編程方案與<b class='flag-5'>實踐</b>

    儀器設備研制與開發-科研與實踐教學結合,自主開發實踐教學設

    摘 要:我們將科研與實踐教學相結合,有意識地將科研成果轉移到學生的實踐教學中去,自主開發了3套學生實踐教學使用的設備和系統,對學生素質培養起到了較好的效果。 關鍵詞:實踐教育;科研與
    發表于 02-14 16:11 ?0次下載

    電子設計實踐課程的教學與管理

    實踐動手能力對 電子信息 專業的畢業生就業尤為重要。電路設計實踐課是提高學生電子制作和設計能力的重要課程。針對社會、學校和學情現狀,將教學內容分為從簡到難的不同模塊
    發表于 08-01 16:08 ?0次下載

    測控工程實踐之LabVIEW實踐教程

    測控工程實踐之LabVIEW實踐教程說明。
    發表于 04-19 14:29 ?43次下載

    《電子DIY》之《單片機實踐項目》之基于單片機+藍牙HC-05模塊的簡易電子琴設計與制作(七十五)(Proteus仿真與實物制作)

    《單片機實踐項目》之基于單片機+藍牙HC-05模塊的簡易電子琴設計與制作(七十五)鏈接:添加鏈接描述
    發表于 01-17 10:27 ?7次下載
    《電子DIY》之《單片機<b class='flag-5'>實踐</b>項目》之基于單片機+藍牙HC-05<b class='flag-5'>模塊</b>的簡易電子琴設計與制作(七十五)(Proteus仿真與實物制作)

    HC05藍牙模塊編程實例

    今天分享一個實踐項目——HC05藍牙模塊的編程。
    的頭像 發表于 05-26 16:01 ?3758次閱讀
    HC05藍牙<b class='flag-5'>模塊</b>編程實例

    千兆光模塊和萬兆光模塊的發展趨勢

    本篇文章將深入探討千兆光模塊和萬兆光模塊的領先技術和研發趨勢。首先介紹了光模塊的工作原理和種類,接著介紹了千兆光模塊和萬兆光模塊的優勢和適用
    的頭像 發表于 11-20 12:47 ?860次閱讀

    WiFi模塊助力少兒編程:創新學習與實踐體驗

    實踐的綜合性體驗。 物聯網項目 WiFi模塊為少兒編程提供了連接實物的便捷途徑,讓孩子們能夠將編程技能應用到物聯網項目中。通過WiFi連接各種傳感器、執行器和微控制器,孩子們可以構建智能化的項目,例如溫度監控器、智能燈光系統
    的頭像 發表于 03-08 16:35 ?454次閱讀
    主站蜘蛛池模板: 亚洲视频在线观看一区 | 岛国大片在线播放 | 加勒比色 | 婷婷丁香四月 | 美女性色 | 68日本xxxxxxxxx | 色综合色 | 天天色天天| 禁漫羞羞a漫入口 | 久久精品香蕉视频 | 国产精品福利在线观看免费不卡 | 女人张开双腿让男人桶完整 | 一级特一级特色生活片 | 天天操天天射天天舔 | 特级黄视频 | avtt天堂网永久资源 | 欧美1314www伊人久久香网 | 天天射天天射天天射 | 色播五月激情 | 加勒比精品久久一区二区三区 | 一区二区不卡免费视频 | 黄色一级视频欧美 | 香蕉午夜视频 | 五月婷婷六月色 | 国产夜夜操 | 性欧美精品久久久久久久 | 五月激情丁香 | 日本三级全黄三级a | 天堂网在线看 | 久久视频精品36线视频在线观看 | 九月丁香婷婷亚洲综合色 | 五月婷婷综合激情网 | 色多多在线观看播放 | 色网站免费视频 | 91大神精品长腿在线观看网站 | 主人扒开腿揉捏花蒂调教cfh | 国产精品免费观看网站 | 欧美一级日韩一级亚洲一级 | 九九国产在线 | 三级在线播放 | 天堂在线观看视频观看www |