欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

rumqttc模塊應(yīng)用實(shí)踐

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

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

Rust是一種系統(tǒng)級(jí)編程語(yǔ)言,具有內(nèi)存安全和高性能的特性。Rust語(yǔ)言的主要目標(biāo)是提供一種安全、并發(fā)、實(shí)用的編程語(yǔ)言,使得開(kāi)發(fā)者可以輕松地編寫高性能的系統(tǒng)級(jí)應(yīng)用程序。本教程將介紹如何使用Rust語(yǔ)言和rumqttc模塊來(lái)實(shí)現(xiàn)MQTT協(xié)議的基礎(chǔ)應(yīng)用和進(jìn)階應(yīng)用。

rumqttc模塊簡(jiǎn)介

rumqttc是一個(gè)基于Rust語(yǔ)言實(shí)現(xiàn)的MQTT客戶端庫(kù),它提供了連接MQTT服務(wù)器、訂閱主題、發(fā)布消息等基本功能,并支持TLS加密連接。rumqttc的API簡(jiǎn)單易用,適合初學(xué)者和中級(jí)開(kāi)發(fā)者使用。

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

[dependencies]
rumqttc = "0.21.0"

應(yīng)用實(shí)踐進(jìn)階

使用QoS2傳輸消息

這個(gè)示例演示如何使用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();
}

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

使用連接池

在實(shí)際應(yīng)用中,我們通常需要同時(shí)處理多個(gè)MQTT客戶端連接,這時(shí)候使用連接池可以提高性能和可靠性。rumqttc模塊提供了一個(gè)ConnectionPool結(jié)構(gòu)體,可以方便地管理多個(gè)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
}

這個(gè)示例中,我們創(chuàng)建了一個(gè)MQTT連接池,連接到本地的MQTT服務(wù)器。然后我們使用循環(huán)創(chuàng)建了10個(gè)MQTT客戶端連接,這些連接會(huì)自動(dòng)被管理和回收。

使用多線程

在實(shí)際應(yīng)用中,我們通常需要同時(shí)處理多個(gè)MQTT消息,這時(shí)候使用多線程可以提高性能和可靠性。Rust語(yǔ)言的多線程非常方便,可以使用標(biāo)準(zhǔn)庫(kù)中的std::thread模塊來(lái)創(chuàng)建線程。

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();
}

這個(gè)示例中,我們創(chuàng)建了一個(gè)MQTT客戶端,連接到本地的MQTT服務(wù)器。然后我們使用std::thread::spawn方法創(chuàng)建了一個(gè)新線程,這個(gè)線程會(huì)在后臺(tái)發(fā)布一條消息到test/topic主題。

持久化存儲(chǔ)消息

通過(guò)持久化存儲(chǔ)可以保證消息不會(huì)因?yàn)槌绦虮罎⒒蚓W(wǎng)絡(luò)故障而丟失。以下是一個(gè)使用SQLite數(shù)據(jù)庫(kù)持久化存儲(chǔ)消息的示例代碼:

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結(jié)構(gòu)體使用SQLite數(shù)據(jù)庫(kù)來(lái)持久化存儲(chǔ)消息。在Event::Incoming(Packet::Publish(publish))分支中,將接收到的消息插入到數(shù)據(jù)庫(kù)中。

總結(jié)

rumqttc模塊是一個(gè)非常方便的MQTT客戶端庫(kù),它提供了一系列API,可以方便地實(shí)現(xiàn)MQTT協(xié)議的功能。本教程作為前一篇的進(jìn)階補(bǔ)充提供了常見(jiàn)的實(shí)際應(yīng)用場(chǎng)景的應(yīng)用示例,希望對(duì)您進(jìn)一步深入的了解和掌握物聯(lián)網(wǎng)傳輸協(xié)議MQTT有所幫助。

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

    關(guān)注

    7

    文章

    2738

    瀏覽量

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

    關(guān)注

    0

    文章

    79

    瀏覽量

    11500
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    38

    文章

    3298

    瀏覽量

    57958
  • 物聯(lián)網(wǎng)設(shè)備

    關(guān)注

    1

    文章

    235

    瀏覽量

    19853
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Rust語(yǔ)言和rumqttc模塊實(shí)現(xiàn)MQTT協(xié)議的異步API

    的系統(tǒng)編程語(yǔ)言,非常適合開(kāi)發(fā)物聯(lián)網(wǎng)設(shè)備和后端服務(wù)。本教程將介紹如何使用Rust語(yǔ)言和rumqttc模塊實(shí)現(xiàn)MQTT協(xié)議的異步API,并提供幾個(gè)相關(guān)的代碼示例,最佳實(shí)踐和教程總結(jié)。 本篇內(nèi)容主要圍繞
    的頭像 發(fā)表于 09-19 14:45 ?2542次閱讀

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

    的編程語(yǔ)言,它在系統(tǒng)編程和網(wǎng)絡(luò)編程方面有著很好的表現(xiàn)。在本教程中,我們將介紹如何使用Rust語(yǔ)言和paho-mqtt模塊實(shí)現(xiàn)MQTT協(xié)議的應(yīng)用。 前面寫過(guò)3篇介紹 rumqttc 的教程,本篇開(kāi)始使用
    的頭像 發(fā)表于 09-20 11:33 ?1421次閱讀

    TFT適配LVGL實(shí)踐分享

    1前言說(shuō)明本章通過(guò)FRDM-MCXN947開(kāi)發(fā)板與正點(diǎn)原子的TFTLCD進(jìn)行實(shí)踐1.2模塊介紹硬件:FRDM-MCXN947開(kāi)發(fā)板:該開(kāi)發(fā)板具有豐富的接口詳細(xì)可參考NXP官方
    的頭像 發(fā)表于 09-04 08:06 ?1770次閱讀
    TFT適配LVGL<b class='flag-5'>實(shí)踐</b>分享

    【大語(yǔ)言模型:原理與工程實(shí)踐】探索《大語(yǔ)言模型原理與工程實(shí)踐》2.0

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

    C51教程使用技巧與實(shí)踐

    C51教程使用技巧與實(shí)踐案例額
    發(fā)表于 08-24 11:14

    虛幻引擎的紋理最佳實(shí)踐

    紋理是游戲不可或缺的一部分。 這是一個(gè)藝術(shù)家可以直接控制的領(lǐng)域,以提高游戲的性能。 本最佳實(shí)踐指南介紹了幾種紋理優(yōu)化,這些優(yōu)化可以幫助您的游戲運(yùn)行得更流暢、看起來(lái)更好。 最佳實(shí)踐系列指南的總體目標(biāo)
    發(fā)表于 08-28 06:39

    電氣工程實(shí)踐-電子實(shí)踐教案

    電氣工程實(shí)踐-電子實(shí)踐教案 實(shí)踐教學(xué)目標(biāo)1、掌握元件識(shí)別及檢測(cè)方法2、掌握儀器儀表使用方法3、掌握設(shè)計(jì)調(diào)試電路方法  
    發(fā)表于 05-04 16:35 ?0次下載

    圖形點(diǎn)陣LCD液晶模塊顯示界面的可視化編程方案與實(shí)踐

    圖形點(diǎn)陣LCD液晶模塊顯示界面的可視化編程方案與實(shí)踐 隨著圖形點(diǎn)陣LCD液晶顯示模塊在各行各業(yè)的逐步使用,使得人機(jī)界面變得越來(lái)越直觀,尤其對(duì)于國(guó)內(nèi)大多數(shù)需要有
    發(fā)表于 11-05 09:16 ?1158次閱讀
    圖形點(diǎn)陣LCD液晶<b class='flag-5'>模塊</b>顯示界面的可視化編程方案與<b class='flag-5'>實(shí)踐</b>

    儀器設(shè)備研制與開(kāi)發(fā)-科研與實(shí)踐教學(xué)結(jié)合,自主開(kāi)發(fā)實(shí)踐教學(xué)設(shè)

    摘 要:我們將科研與實(shí)踐教學(xué)相結(jié)合,有意識(shí)地將科研成果轉(zhuǎn)移到學(xué)生的實(shí)踐教學(xué)中去,自主開(kāi)發(fā)了3套學(xué)生實(shí)踐教學(xué)使用的設(shè)備和系統(tǒng),對(duì)學(xué)生素質(zhì)培養(yǎng)起到了較好的效果。 關(guān)鍵詞:實(shí)踐教育;科研與
    發(fā)表于 02-14 16:11 ?0次下載

    電子設(shè)計(jì)實(shí)踐課程的教學(xué)與管理

    實(shí)踐動(dòng)手能力對(duì) 電子信息 專業(yè)的畢業(yè)生就業(yè)尤為重要。電路設(shè)計(jì)實(shí)踐課是提高學(xué)生電子制作和設(shè)計(jì)能力的重要課程。針對(duì)社會(huì)、學(xué)校和學(xué)情現(xiàn)狀,將教學(xué)內(nèi)容分為從簡(jiǎn)到難的不同模塊
    發(fā)表于 08-01 16:08 ?0次下載

    測(cè)控工程實(shí)踐之LabVIEW實(shí)踐教程

    測(cè)控工程實(shí)踐之LabVIEW實(shí)踐教程說(shuō)明。
    發(fā)表于 04-19 14:29 ?43次下載

    《電子DIY》之《單片機(jī)實(shí)踐項(xiàng)目》之基于單片機(jī)+藍(lán)牙HC-05模塊的簡(jiǎn)易電子琴設(shè)計(jì)與制作(七十五)(Proteus仿真與實(shí)物制作)

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

    HC05藍(lán)牙模塊編程實(shí)例

    今天分享一個(gè)實(shí)踐項(xiàng)目——HC05藍(lán)牙模塊的編程。
    的頭像 發(fā)表于 05-26 16:01 ?3776次閱讀
    HC05藍(lán)牙<b class='flag-5'>模塊</b>編程實(shí)例

    千兆光模塊和萬(wàn)兆光模塊的發(fā)展趨勢(shì)

    本篇文章將深入探討千兆光模塊和萬(wàn)兆光模塊的領(lǐng)先技術(shù)和研發(fā)趨勢(shì)。首先介紹了光模塊的工作原理和種類,接著介紹了千兆光模塊和萬(wàn)兆光模塊的優(yōu)勢(shì)和適用
    的頭像 發(fā)表于 11-20 12:47 ?869次閱讀

    WiFi模塊助力少兒編程:創(chuàng)新學(xué)習(xí)與實(shí)踐體驗(yàn)

    實(shí)踐的綜合性體驗(yàn)。 物聯(lián)網(wǎng)項(xiàng)目 WiFi模塊為少兒編程提供了連接實(shí)物的便捷途徑,讓孩子們能夠?qū)⒕幊碳寄軕?yīng)用到物聯(lián)網(wǎng)項(xiàng)目中。通過(guò)WiFi連接各種傳感器、執(zhí)行器和微控制器,孩子們可以構(gòu)建智能化的項(xiàng)目,例如溫度監(jiān)控器、智能燈光系統(tǒng)
    的頭像 發(fā)表于 03-08 16:35 ?460次閱讀