MQTT_介紹_1.1

歷史

  • 1999年:MQTT最初由IBM的Andy Stanford-Clark和Cirrus Link的Arlen Nipper開發,用于滿足石油和天然氣公司在遠程地區監控設備的需求。

  • 2006年:IBM發布了MQTT的最初開源實現,但此時MQTT并未獲得廣泛的關注。

  • 2010年:隨著物聯網(IoT)的興起,MQTT開始被更廣泛地采用,并逐漸有了更多的開源實現。

  • 2011年:Eclipse基金會啟動了Eclipse Paho項目,提供了一系列開源的MQTT客戶端庫,支持多種編程語言。

  • 2012年:Eclipse基金會啟動了Eclipse Mosquitto項目,提供了一個開源的MQTT代理(broker)實現。

  • 2014年:MQTT成為OASIS標準,這標志著它的發展進入了一個新的階段,并進一步推動了開源社區對MQTT協議的興趣和參與。

  • 2016年:MQTT 3.1.1版本被正式批準為OASIS標準,這是MQTT的第一個正式標準版本。

  • 2019年:MQTT 5.0版本發布,提供了許多新特性,包括更好的錯誤處理、共享訂閱、消息屬性和增強的安全性。開源社區迅速跟進,更新了各種開源實現以支持新版本。

  • 至今:MQTT的開源實現繼續發展,如Eclipse Paho和Mosquitto等項目,這些項目的成功和普及直接促進了MQTT協議的廣泛應用和發展。同時,其他開源項目如HiveMQ、VerneMQ等也提供了不同的功能和服務,豐富了MQTT的開源生態系統。

特點

?

  1. 輕量級:MQTT設計簡潔,消息頭很小,可以最小化網絡帶寬的使用,適合在資源受限的環境中運行,如物聯網設備。

  2. 發布/訂閱模式:MQTT使用發布/訂閱消息模式,允許一個消息被發送到一個主題(topic),并且所有訂閱了該主題的客戶端都會收到這個消息。這種模式解耦了發布者和訂閱者,提高了系統的可擴展性和靈活性。

  3. 服務質量(QoS)級別:MQTT支持三種不同的服務質量級別,以適應不同的網絡環境和應用需求:

    • QoS 0:最多一次交付。消息可能會丟失,但不會重復。
    • QoS 1:至少一次交付。消息不會丟失,但可能會重復。
    • QoS 2:確保一次交付。消息不會丟失也不會重復。
  4. 持久會話:MQTT支持持久會話,客戶端可以指示代理(broker)存儲其訂閱信息和未確認的消息,即使客戶端斷開連接后重新連接,也能恢復會話狀態。

  5. 遺囑消息(Last Will and Testament):客戶端在連接到代理時可以指定一個遺囑消息,如果客戶端非正常斷開連接,代理會將這個遺囑消息發布到指定的主題。

  6. 小型傳輸優化:MQTT協議優化了小型傳輸,適合在帶寬有限和不穩定的網絡環境中使用,如移動通信網絡或衛星鏈路。

  7. 安全性MQTT支持多種安全性選項,包括使用TLS(Transport Layer Security)加密傳輸,以確保數據的安全和隱私。

  8. 跨平臺兼容性MQTT可以在多種平臺上運行,包括嵌入式系統、服務器、移動設備等,支持多種編程語言。

  9. 易于使用和集成:MQTT的簡單性和靈活性使其易于集成到現有的系統和應用程序中,同時也便于開發者快速上手和使用。

  10. 社區支持和開源實現:MQTT有廣泛的社區支持,并且有多種開源實現,如Eclipse Paho和Mosquitto,這些實現提供了客戶端和代理的代碼,可以自由使用和修改。

  11. 適應性強:MQTT協議可以適應各種網絡環境和應用場景,包括物聯網、移動應用、智能家居、工業自動化等。

  12. 可擴展性:MQTT協議設計允許通過添加新的功能和服務來擴展協議,以適應未來的需求和發展

?MQTT 5.0? ?與? ? 3.1.1的區別

MQTT 5.0是MQTT協議的第四個正式版本,它在2019年發布,提供了許多新特性和改進,與之前的3.1.1版本相比,MQTT 5.0在性能、功能和安全方面都有顯著的提升。以下是MQTT 5.0與3.1.1版本之間的一些主要區別:

?

  1. 增強的認證和授權:MQTT 5.0提供了更靈活的認證和授權機制,支持多種認證方法。

  2. 消息和主題屬性:MQTT 5.0增加了對消息和主題屬性的支持,允許在發布消息時附加額外的元數據。

  3. 共享訂閱:MQTT 5.0允許客戶端通過共享訂閱的方式來訂閱主題,以提高系統的可擴展性和性能。

  4. 響應信息:MQTT 5.0支持響應信息,允許客戶端在發布消息時請求一個響應。

  5. 改進的會話管理:MQTT 5.0提供了更精細的會話管理控制,包括會話過期的設置和會話終結的原因。

  6. 增強的錯誤報告:MQTT 5.0增加了更多的錯誤代碼和原因字符串,使得錯誤報告更加詳細和有用。

  7. 消息重傳:MQTT 5.0在QoS 1和QoS 2中引入了消息重傳機制,以提高消息的可靠傳輸。

  8. 流量控制:MQTT 5.0提供了流量控制功能,以避免過載。

  9. 用戶屬性:MQTT 5.0允許在連接、發布、訂閱等操作中添加用戶屬性,以提供額外的上下文信息。

  10. 更好的性能和可擴展性:MQTT 5.0在設計上考慮了更好的性能和可擴展性,以適應未來的需求和發展。

  11. 兼容性:雖然MQTT 5.0引入了許多新特性,但它仍然保持了與3.1.1版本的兼容性。

?

?MQTT 常用的服務器

?

MQTT服務器(也稱為MQTT代理或MQTT broker)是MQTT(Message Queuing Telemetry Transport)協議中的核心組件,負責接收客戶端的連接請求、處理客戶端的訂閱和發布消息請求,并將消息路由到相應的訂閱者。以下是幾種常用的MQTT服務器:

?

  1. Eclipse Mosquitto:這是一個開源的MQTT服務器,由Eclipse基金會維護。它支持MQTT 3.1、3.1.1和5.0版本,具有高度的可擴展性和可靠性,適用于各種規模的部署。

  2. HiveMQ:這是一個商業化的MQTT服務器,提供企業級的功能和性能。HiveMQ支持MQTT 3.1、3.1.1和5.0版本,并且提供了豐富的插件和擴展功能。

  3. IBM MQTT Server:這是IBM提供的一個MQTT服務器,支持MQTT 3.1和3.1.1版本。它提供了高可用性和安全性,并且可以與其他IBM產品集成。

  4. VerneMQ:這是一個由Erlang社區開發的MQTT服務器,支持MQTT 3.1、3.1.1和5.0版本。它具有高可用性和可擴展性,并且支持多種認證和授權機制。

  5. EMQX:這是一個由EMQ公司開發的MQTT服務器,支持MQTT 3.1、3.1.1和5.0版本。它提供了豐富的插件和擴展功能,以及高可用性和安全性。//有大量的中文資料并且開源

?官網

Eclipse Mosquitto? 開源 MQTT 代理

EMQX官網?

?

?MQTT 發布/訂閱模式介紹

發布者(Publisher)//發信息

  • 發布消息:發布者是發送消息的客戶端,它將消息發布到一個特定的主題(Topic)。
  • QoS級別:發布者可以選擇不同的服務質量級別(QoS Levels),以控制消息的可靠傳輸:
    • QoS 0:最多一次(At Most Once) - 消息可能會丟失,但不會重復發送。
    • QoS 1:至少一次(At Least Once) - 消息不會丟失,但可能會重復發送。
    • QoS 2:精確一次(Exactly Once) - 消息不會丟失也不會重復發送。

訂閱者(Subscriber)//接收信息

  • 訂閱主題:訂閱者是接收消息的客戶端,它可以訂閱一個或多個主題。
  • 接收消息:訂閱者會接收所有發布到其訂閱主題的消息。
  • QoS級別:訂閱者也可以指定它希望接收消息的QoS級別。

代理(Broker)//服務器

  • 消息路由:代理是MQTT的核心組件,負責接收發布者的消息,并將消息路由到訂閱該主題的訂閱者。
  • 持久會話:代理可以存儲訂閱者和發布者的會話信息,以便在網絡斷開后重新連接時恢復會話狀態。

遺囑消息(Last Will and Testament)

  • 發布遺囑:當客戶端斷開連接時,如果配置了遺囑消息,代理會發布一個消息到指定的主題,通知其他客戶端該客戶端已經斷開。

?主題(Topic)

  • 主題是 MQTT 進行消息路由的基礎,它類似 URL 路徑,使用斜杠 / 進行分層,比如 sensor/1/temperature。一個主題可以有多個訂閱者,代理會將該主題下的消息轉發給所有訂閱者;一個 主題也可以有多個發布者,代理將按照消息到達的順序轉發。

?

?

?

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

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

相關文章

三大平臺直播視頻下載保存方法

終于解決了視頻號下載的問題,2024年5月15日親測可用。 而且免費。 教程第二部分,有本地電腦無法下載的解決方案。 第一部分:使用教程(正常) 第1步:下載安裝包 下載迅雷網盤搜索:大海福利合集…

【Python報錯】Python安裝模塊時報錯Fatal error in launcher

【Python報錯】Python安裝模塊時報錯Fatal error in launcher 最近需要用到python下載一個小工具,自信敲下回車鍵本想看到黑乎乎的終端上會出現快速跳躍的命令代碼,沒想到,報錯了...... Fatal error in launcher: Unable to create process …

關于Windows中的NTUSER.DAT文件的知識,看這篇文章就差不多了

每個用戶配置文件中都隱藏著一個名為NTUSER.DAT的文件。此文件包含每個用戶的設置和首選項,因此你不應該刪除它,也可能不應該編輯它。Windows會自動為你加載、更改和保存該文件。 NTUSER.DAT包含你的用戶配置文件設置 每次更改Windows和已安裝程序的外觀和行為時,無論是桌…

【Qt】Qt開源項目

1、Flameshot 截圖工具 1.1 簡介 Flameshot是一款功能強大但易于使用的屏幕截圖軟件,中文名稱火焰截圖。 Flameshot 簡單易用并有一個CLI版本,所以可以從命令行來進行截圖。 Flameshot 是一個Linux發行版中完全免費且開源的截圖工具 1.2 源碼 github:https://github.com…

智能監控與安全管理:安全帽檢測算法的實踐與應用

在工地、煤礦等高危工作環境中,安全帽的佩戴至關重要。安全帽能夠有效防止因墜落物體或碰撞等引起的頭部傷害,從而保護工作人員的生命安全。然而,傳統的檢查人員佩戴安全帽的方式主要依賴于現場監督和巡查,這種方法不僅耗費大量人…

分頁查詢(PageHelper)

PageHelper依賴 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper}</version> </dependency>DTO接收類 package com.sky.dto;import l…

不用投稿郵箱,怎樣向各大新聞媒體投稿?

身為單位的信息宣傳員,我深知肩上責任重大。每個月,完成單位在媒體上投稿發表文章的考核任務,就如同一場無聲的賽跑,既要保證速度,更要注重質量。起初,我遵循“前輩們”的老路,一頭扎進了郵箱投稿的海洋。但很快,現實給了我一記重拳——郵箱投稿的競爭猶如千軍萬馬過獨木橋,稿件…

Java練習題(二)

6、在異常處理中&#xff0c;如釋放資源&#xff0c;關閉數據庫、關閉文件應由&#xff08;C &#xff09;語 句來完成。 A.try子句 B.catch子句 C.finally子句 D.throw子句 finally子句一般是用來清理這些資源的 7、以下代碼段執行后的輸出結果為…

Hadoop3:客戶端向HDFS寫數據流的流程講解(較枯燥)

一、場景描述 我們登陸HDFS的web端&#xff0c;上傳一個大文件。 二、流程圖 三、講解 流程1&#xff08;Client與NameNode交互&#xff09; 1、HDFS client創建DistributedFileSystem&#xff0c;通過dfs與NameNode進行2次&#xff08;一來一回4次&#xff09;對話&#x…

x264 幀類型代價計算原理:slicetype_mb_cost 函數分析

slicetype_mb_cost 函數 函數功能 計算每個宏塊 MB 的代價 cost。函數參數分析 x264_t *h:全局編碼結構體x264_mb_analysis_t *a:宏塊分析結構體x264_frame_t **frames:系列幀數據結構體int p0:幀序號之一,一般指向靠前幀int p1:幀序號之一,一般指向靠后幀int b:幀標志…

如何修改antd的pagination翻頁組件為中文?

很簡單 加一個屬性 locale{{ items_per_page: 頁 }}<PaginationpageSize{pagination.pageSize}locale{{ items_per_page: 頁 }}current{pagination.current}showTotal{(total, range) > 共有 ${pagination.total} 條數據}style{{ textAlign: right }}onChange{(page: num…

Go微服務開源框架kratos的依賴注入關系總結

該文章為學習開源微服務框架kratos的學習筆記&#xff01;官方文檔見&#xff1a;簡介 | Kratos Kratos 一套輕量級 Go 微服務框架&#xff0c;包含大量微服務相關框架及工具。 一、Kratos 項目結構簡介 通過 Kratos 工具生成的 Go工程化項目模板如下&#xff1a; applicati…

【半夜學習MySQL】復合查詢(含多表查詢、自連接、單行/多行子查詢、多列子查詢、合并查詢等詳解)

&#x1f3e0;關于專欄&#xff1a;半夜學習MySQL專欄用于記錄MySQL數據相關內容。 &#x1f3af;每天努力一點點&#xff0c;技術變化看得見 文章目錄 回顧基本查詢多表查詢自連接子查詢單行子查詢多行子查詢多列子查詢在from子句中使用子查詢合并查詢 回顧基本查詢 下面使用…

計算機網絡 -- 序列化與反序列化

一 協議的重要性 我們都知道&#xff0c;在進行網絡通信的過程中&#xff0c;通信的雙方可以是不同的設備&#xff0c;不同的平臺&#xff0c;不同的平臺&#xff0c;比如說&#xff0c;手機用戶和電腦用戶進行通信&#xff0c;ios系統和安卓系統進行通信。 自己的數據&#xf…

抖店商品詳情API接口(店鋪|標題|主圖|價格|SKU屬性等)

抖店商品詳情API接口(店鋪|標題|主圖|價格|SKU屬性等) 抖店商品詳情API接口是指通過調用抖音開放平臺提供的接口&#xff0c;獲取抖店上商品的詳細信息的方法。 抖店開放平臺提供了一系列的接口&#xff0c;可以用于獲取商品的基本信息、價格、庫存、銷量、評價等各種信息。以…

UIKit之圖片瀏覽器

功能需求 實現一個圖片瀏覽器&#xff0c;點擊左右按鈕可以切換背景圖&#xff0c;且更新背景圖對應的索引頁和圖片描述內容。 分析&#xff1a; 實現一個UIView的子類即可&#xff0c;該子類包含多個按鈕。 實現步驟&#xff1a; 使用OC語言&#xff0c;故創建cocoa Touch類…

數據庫的存儲過程、函數與觸發器

使用下面的場景來引入 1.創建表 CREATE DATABASE staff; USE staff; CREATE TABLE employee(id INT NOT NULL AUTO_INCREMENT,userName VARCHAR(255),birthDate DATE,idCard VARCHAR(255),loginName VARCHAR(255),PASSWORD VARCHAR(255),mobile VARCHAR(255),email VARCHAR(2…

開源連鎖收銀系統哪個好

針對開源連鎖收銀系統的選擇&#xff0c;商淘云是一個備受關注的候選。商淘云以其功能豐富、易于定制和穩定性等優勢&#xff0c;吸引了眾多企業和開發者的關注。下面將從四個方面探討商淘云開源連鎖收銀系統的優勢&#xff1a; 首先&#xff0c;商淘云提供了豐富的功能模塊。作…

如何查看SNMP設備的OID

什么是OID和MIB OID OID 代表對象標識符。 OID 唯一地標識 MIB 層次結構中的托管對象。 這可以被描述為一棵樹&#xff0c;其級別由不同的組織分配。MIB MIB&#xff08;管理信息基&#xff09;提供數字化OID到可讀文本的映射。 使用MIB Browser掃描OID 我的設備是一臺UPS SN…

【Uniapp小程序】onShareAppMessage異步處理請求完后再分享

分享按鈕 <button type"primary" open-type"share">保存并分享 </button>修改onShareAppMessage saveImage為promise方法 async onShareAppMessage() {const saveRes await saveImage();if (saveRes.code 200) {return {title: "tit…