MQTT:構建高效物聯網通信的輕量級協議

MQTT – 輕量級物聯網消息推送協議

MQTT(Message Queuing Telemetry Transport)是機器對機器(M2M)/物聯網(IoT)連接協議。它被設計為一個極其輕量級的發布/訂閱消息傳輸協議。對于需要較小代碼占用空間和/或網絡帶寬非常寶貴的遠程連接非常有用,是專為受限設備和低帶寬、高延遲或不可靠的網絡而設計。這些原則也使該協議成為新興的“機器到機器”(M2M)或物聯網(IoT)世界的連接設備,以及帶寬和電池功率非常高的移動應用的理想選擇。例如,它已被用于通過衛星鏈路與代理通信的傳感器、與醫療服務提供者的撥號連接,以及一系列家庭自動化和小型設備場景。它也是移動應用的理想選擇,因為它體積小,功耗低,數據包最小,并且可以有效地將信息分配給一個或多個接收器。  
在這里插入圖片描述

特點

  • 開放消息協議,簡單易實現
  • 發布訂閱模式,一對多消息發布
  • 基于TCP/IP網絡連接,提供有序,無損,雙向連接。
  • 1字節固定報頭,2字節心跳報文,最小化傳輸開銷和協議交換,有效減少網絡流量。
  • 消息QoS支持,可靠傳輸保證

應用

MQTT協議廣泛應用于物聯網、移動互聯網、智能硬件、車聯網、電力能源等領域。

  • 物聯網M2M通信,物聯網大數據采集
  • Android消息推送,WEB消息推送
  • 移動即時消息,例如Facebook Messenger
  • 智能硬件、智能家具、智能電器
  • 車聯網通信,電動車站樁采集
  • 智慧城市、遠程醫療、遠程教育
  • 電力、石油與能源等行業市場

工作原理

Mqtt的工作原理可以概括為:MQTT 通過其兩個主要組件來實現發布/訂閱模型:客戶端和代理

? 客戶端(client)是發布或訂閱消息的設備或應用程序,分別使它們成為所謂的發布者或訂閱者。客戶端可以向主題發布消息,主題是消息發送到的邏輯通道。訂閱者可以是一個或多個客戶端,接收發布到主題的消息。客戶端也可以同時充當發布者和訂閱者。

? 另一方面,代理端(broker)是在客戶端之間路由消息的中間服務器。代理通過跟蹤訂閱和向訂閱的客戶端發布消息來管理客戶端之間的消息分發。MQTT 客戶端可以用多種編程語言實現,可以在各種硬件平臺上運行,從低功耗微控制器到功能強大的服務器。代理可以部署在云端或本地,并且可以水平擴展以支持每秒數百萬的設備和消息。阿里云、華為云、AWS 或 Azure 等超大規模應用程序都圍繞其服務提供 MQTT 包裝器,對 MQTT 協議提供不同級別的支持。

在這里插入圖片描述

消息通過使用 MQTT 的代理與其他設備或軟件共享。每條消息都有一個主題(Topic),Broker 可以根據該主題進一步處理消息。此外,每條消息都包含一個消息內容,即所謂的有效負載(payload)。MQTT 負載不綁定特定結構,可以自由設計。然而,為消息內容指定一個特定的結構是有幫助的,這樣它就可以被其他設備或軟件讀取。潛在的消息結構可以是 JSON、XML 或 OPC UA。只要所有設備和軟件都使用相同的結構進行通信,定義的結構就可以實現順暢的內部通信
當訂閱客戶端失去與代理的連接時,代理可以 根據用例和實現 - 保留任何旨在發送給訂閱者的消息,然后在訂閱者重新連接時立即傳遞它們。這確保訂閱者不會錯過任何消息并以正確的順序接收它們,在國內簡稱遺囑機制。

MQTT協議特點

輕量、簡單、開放,是低開銷、低帶寬占用的即時通訊協議。使用場景有:機器與機器(M2M)、物聯網(IoT)。MQTT協議當前版本為:2014年發布的MQTT v3.1.1。除標準版外,還有一個簡化版MQTT-SN,該協議主要針對嵌入式設備,這些設備一般工作于TCP/IP網絡,如ZigBee。

使用的發布/訂閱消息模式,它提供了一對多消息分發,以實現與應用程序的解耦。對負載內容屏蔽的消息傳輸機制。

對傳輸消息有三種服務質量(QoS):

  • QoS 0:最多一次,這一級別會發生消息丟失或重復,消息發布依賴于底層TCP/IP網絡。即:<=1
  • QoS 1:最少一次(承諾消息將至少傳送一次給訂閱者),這一級別會確保消息到達,但消息可能會重復。即:>=1
  • QoS 2:只有一次(承諾消息僅傳送到目的地一次),確保消息只有一次到達。即:=1。在一些要求比較嚴格的計費系統中,可以使用此級別

參考

https://blog.csdn.net/admans/article/details/137508355

https://www.cnblogs.com/wuyongyin/p/16178060.html

https://www.cnblogs.com/emqx/p/18535347

https://cloud.tencent.com/developer/article/2520461?frompage=seopage&policyId=20240001

QTMQTT

開源地址 https://code.qt.io/qt/qtmqtt.git
從上述地址拉取下來,然后根據當前使用的QT版本切換到對應的分支。

在這里插入圖片描述

工程構建

打開工程文件:qtmqtt.pro

編譯中可能會出錯: “QtMqtt/qmqttglobal.h”: No such file or directory

將mqtt包里面src源碼文件夾下所有頭文件復制一份到 QT安裝包目錄下include/mqtt文件夾即可解決。

編譯中可能會出錯:perl.exe未安裝找不到。
根據提示下載該文件或者本地查找是否有perl.exe程序,將路徑配置到環境變量中使用即可。

環境配置

構建成功后

  1. 將mqtt包 構件目錄里面的 lib中的文件全部復制到對應QT編譯器的lib文件夾中

在這里插入圖片描述

  1. 將mqtt包 構件目錄里面的bin文件夾下的文件 復制到對應QT編譯器的bin文件夾中

在這里插入圖片描述

  1. 將mqtt包 構件目錄里面的mkspecs文件夾下的modules或者modules-inst 文件夾下的文件復制到QT編譯器對應的目錄下

在這里插入圖片描述

  1. 將mqtt包里面的 examples\mqtt\simpleclient文件夾復制一份到工程目錄(即復制一份來實驗),找開后,添加mqtt模塊。將pro文件里面東西改成這樣。執行qmake沒有報錯即可。

在這里插入圖片描述

  1. 測試,打開example目錄中的simpleClient測試程序。

在這里插入圖片描述

官方提供了 test.mosquitto.org 和 broker.hivemq.com 兩個測試地址),也可以使用自己的地址。下面進行一些測試:

State Change0 表示等待中

State Change2 表示已連接上。

在這里插入圖片描述

  1. 接下來就可以構建自己的mqtt工程了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85422.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85422.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85422.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI自動生成復雜架構圖,流程圖,思維導圖

AI自動生成復雜架構圖&#xff0c;流程圖&#xff0c;思維導圖方案 1. 背景 在我們自己去繪制架構圖&#xff0c;流程圖&#xff0c;思維導圖的時候&#xff0c;我們通常需要花費大量的時間去繪制。 目前的一些直接生圖的模型也只能生成簡單的流程圖&#xff0c;不能生成復雜…

129. 求根節點到葉節點數字之和 --- DFS +回溯(js)

129. 求根節點到葉節點數字之和 --- DFS 回溯&#xff08;js&#xff09; 題目描述解題思路完整代碼 題目描述 129. 求根節點到葉節點數字之和 解題思路 和 257. 二叉樹的所有路徑&#xff08;js&#xff09; 是一樣的思路。 不一樣的地方就是遇到葉子節點的時候把路徑拼接…

SpringBoot電腦商城項目--修改默認收貨地址

1. 修改默認收貨地址-持久層 1.1 規劃sql語句 檢測當前用戶向設置為默認收貨地址的這條數據是否存在 SELECT * FROM t_address WHERE aid#{aid} 在修改用戶的收獲默認地址之前&#xff0c;先將所有的收貨地址設置為非默認 UPDATE t_address SET is_default0 WHERE uid#{uid} …

LabVIEW FPGA 資源擴展

針對NI CompactRIO 9045 控制器 Kintex-7 70T FPGA 資源不足問題&#xff0c;通過 NI 9151 R 系列可重配置 I/O 模塊擴展外部 FPGA 處理能力&#xff0c;在保留原有機箱架構下實現實時任務分流&#xff0c;解決Slice、LUT 等資源緊張問題&#xff0c;提升系統并行處理能力。 ?…

【漏洞復現】Apache Kafka Connect 任意文件讀取漏洞(CVE-2025-27817)

文章目錄 前言一、Apache Kafka 簡介二、漏洞描述三、影響版本四、FOFA查詢語句五、漏洞原理分析六、漏洞復現七、修復建議前言 由于Apache Kafka客戶端未對用戶輸入進行嚴格驗證和限制,未經身份驗證的攻擊者可通過構造惡意配置讀取環境變量或磁盤任意內容,或向非預期位置發…

day13-軟件包管理

1.每日復盤與今日內容 1.1復盤 yum源/apt源配置文件,核心下載地址.二進制部署服務.編譯安裝軟件. 2.軟件包管理-實戰部分 2.1 yum源/apt源配置 源下載軟件的地址配置多種源 1??系統也有默認的源&#xff0c;里面也包含很多常用的軟件. 2??安裝nginx、yum源 3??安…

榕壹云快遞寄件系統:聚合快遞、智能追蹤、二次開發,一站式物流解決方案

在電商物流高速發展的今天&#xff0c;快遞寄件需求呈現爆炸式增長。傳統分散的寄件方式效率低下&#xff0c;用戶迫切需要一個整合多家快遞公司的便捷平臺。榕壹云公司開發的快遞寄件系統應運而生&#xff0c;通過聚合多家快遞資源、優化操作流程、提供豐富的功能模塊&#xf…

一款功能強大的專業CSV編輯工具

Rons Data Edit是一款為Windows操作系統設計的現代CSV文件編輯器&#xff0c;它結合了優雅、強大和易用性&#xff0c;它可以打開任何格式的分隔文本文件(如CSV、TSV等)&#xff0c;并允許用戶完全控制文件的內容和結構。 功能特點 支持明暗主題&#xff0c;可以在預定義的20多…

什么是軟件架構?和系統設計有何區別?

一、軟件架構的定義與核心要素 1.1 基本概念 軟件架構(Software Architecture)是指系統的高層結構,包含: 組件(Components)及其相互關系指導設計的架構原則和決策滿足質量屬性(Quality Attributes)的技術方案引用權威定義:IEEE 1471標準將架構描述為"系統的基本組織,…

九尾狐編程語言新算法“超維時空演算體”

一、核心架構設計 1&#xff0e;量子&#xfe63;生物混合計算基座 ◇底層采用量子糾纏拓撲網絡&#xff0c;處理超越經 典計算復雜度的問題&#xff08;如 NP - Hard 優化&#xff09;&#xff0e;中層嵌入類腦脈沖神經網絡&#xff0c;模擬人腦跨領域聯想能力&#xff0c;…

RoboVerse--為機器人學習打造的大一統世界--UC Berkeley...--2025.4.26

ROBOVERSE 包含一個可擴展的仿真平臺、大規模的合成數據集&#xff0c;以及統一的基準測試。 該仿真平臺通過統一協議&#xff0c;支持新任務和演示的無縫接入&#xff0c;保證了靈活性和可擴展性。該數據集包含 1,000 多個多樣化任務及超過 1,000 萬個狀態轉換&#xff0c;構…

Fiddler抓包工具實戰指南:結合Charles、Postman優化Web與移動調試流程

在Web開發與移動端調試的工作流程中&#xff0c;網絡請求的可視化、分析和控制能力對開發效率有著決定性影響。特別是在處理復雜接口聯調、性能瓶頸排查&#xff0c;甚至安全漏洞分析時&#xff0c;一款可靠的抓包工具幾乎成為了每一位開發者的“標配”。 Fiddler作為長期深受…

6/19作業

思維導圖 單選題 樹 1. 向一棵平衡二叉樹中插入一個結點后&#xff0c;一定會改變其平衡性。 &#xff08; &#xff09; A 正確 B 錯誤 正確答案&#xff1a;B 你的答案&#xff1a;A 官方解析&#xff1a; 向平衡二叉樹中插入節點并不一定會改變其平衡性。平衡二叉樹(如AVL樹…

angular 圖斑點擊,列表選中并滾動到中間位置

如圖所示&#xff1a; html代碼&#xff1a; 1. #listContainer 2. [attr.data-id]"center.id" <div class"resTableCss" #listContainer><div *ngFor"let center of tbList" [attr.data-id]"center.id" class"res-it…

Java線程同步的簡單理解

為什么需要線程同步 對于以下代碼&#xff1a;兩個線程對同一個變量分別進行100000次加一和減一操作&#xff0c;但是每次運行的輸出基本都是不同的&#xff08;注意線程的join操作保證了兩個線程都運行完之后才執行System.out.println&#xff09; import org.junit.Test;pu…

Makefile的通用模板 + 倒計時小程序(13)

文章目錄 Makefile 的通用模板1. Makefile 的推導原則2. 設計 Makefile 的通用模板3. 通用模板代碼&#xff08;可以直接拿來用&#xff09; Linux 第一個系統程序-進度條&#xff08;7-3.00.00&#xff09;1. 補充回車與換行2. 行緩沖區3. 倒計時小程序 Makefile 的通用模板 …

【ArcGIS】水文分析與流域劃分

【ArcGIS】水文分析與流域劃分 一、基礎數據處理1、下載數據2、拼接DEM數據3、填充洼地4、流向分析5、流量分析6、河網生成&#xff08;柵格計算器&#xff09;7、河網分級8、河流鏈接&#xff08;提取子流域的關鍵&#xff09; 二、多個小流域提取1、捕捉傾瀉點2、集水區&…

【C++】簡單工廠模式/工廠方法模式/抽象工廠模式對比

目錄 一、簡單工廠模式&#xff08;Simple Factory Pattern&#xff09;二、工廠方法模式&#xff08;Factory Method Pattern&#xff09;三、抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09;四、三者對比總結五、選擇建議如果這篇文章對你有所幫助&#xff0c…

博圖SCL中CONTINUE語句詳解:高效循環控制案例

博圖SCL中CONTINUE語句詳解&#xff1a;高效循環控制利器 在博圖&#xff08;TIA Portal&#xff09;的SCL&#xff08;結構化控制語言&#xff09;編程中&#xff0c;CONTINUE語句是優化循環流程的強大工具。它允許您**跳過當前循環迭代的剩余代碼&#xff0c;直接進入下一次…

django HttpResponse 加返回碼

在Django框架中&#xff0c;HttpResponse對象是用來構造HTTP響應并將其發送回客戶端的。當你創建一個HttpResponse對象時&#xff0c;你可以指定一個返回碼&#xff08;或狀態碼&#xff09;&#xff0c;這是HTTP響應的一部分&#xff0c;用來表示請求的處理結果。狀態碼是三位…