那曲檬骨新材料有限公司

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

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

3天內不再提示

在Windows平臺上搭建一個簡單的MQTT協議應用

冬至配餃子 ? 來源:小麥大叔 ? 作者:菜刀和小麥 ? 2022-08-15 11:00 ? 次閱讀

mqtt協議

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基于發布/訂閱(publish/subscribe)模式的“輕量級”通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發布。

MQTT最大優點在于,用極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務

作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用。

1 MQTT協議特點

MQTT是一個基于客戶端-服務器的消息發布/訂閱傳輸協議。

MQTT協議是輕量、簡單、開放和易于實現的,這些特點使它適用范圍非常廣泛。在很多情況下,包括受限的環境中,如:機器與機器(M2M通信和物聯網(IoT)。

其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用。

MQTT協議當前版本為,2014年發布的MQTT v3.1.1。除標準版外,還有一個簡化版MQTT-SN,該協議主要針對嵌入式設備,這些設備一般工作于TCP/IP網絡,如:ZigBee

MQTT 與 HTTP 一樣,MQTT 運行在傳輸控制協議/互聯網協議 (TCP/IP) 堆棧之上。

poYBAGL5tSKAIDbCAAChk2n1NaI031.png

MQTT OSI

發布和訂閱

MQTT使用的發布/訂閱消息模式,它提供了一對多的消息分發機制,從而實現與應用程序的解耦。

這是一種消息傳遞模式,消息不是直接從發送器發送到接收器(即點對點),而是由MQTT server(或稱為 MQTT Broker)分發的。

pYYBAGL5tTSAXfIjAADAZ98fLFc398.png

MQTT 服務器是發布-訂閱架構的核心。

它可以非常簡單地在Raspberry PiNAS等單板計算機上實現,當然也可以在大型機或 Internet 服務器上實現。

服務器分發消息,因此必須是發布者,但絕不是訂閱者!

客戶端可以發布消息(發送方)、訂閱消息(接收方)或兩者兼而有之。

客戶端(也稱為節點)是一種智能設備,如微控制器或具有 TCP/IP 堆棧和實現 MQTT 協議的軟件的計算機。

消息在允許過濾的主題下發布。主題是分層劃分的 UTF-8 字符串。不同的主題級別用斜杠/作為分隔符號。

我們來看看下面的設置。

這就是一個簡單的MQTT的應用場景,具體如下圖所示;

pYYBAGL5tUqALLjjAAFC_bFPqzQ752.png

MQTT 發布和訂閱

QoS(Quality of Service levels)

服務質量是 MQTT 的一個重要特性。當我們使用 TCP/IP 時,連接已經在一定程度上受到保護。但是在無線網絡中,中斷和干擾很頻繁,MQTT 在這里幫助避免信息丟失及其服務質量水平。這些級別在發布時使用。如果客戶端發布到 MQTT 服務器,則客戶端將是發送者,MQTT 服務器將是接收者。當MQTT服務器向客戶端發布消息時,服務器是發送者,客戶端是接收者。

QoS 0

這一級別會發生消息丟失或重復,消息發布依賴于底層TCP/IP網絡。即:<=1

poYBAGL5taGARbCDAABPNJNgia8476.png

QoS 1

QoS 1 承諾消息將至少傳送一次給訂閱者。

poYBAGL5tZCAQK1eAABeP3EKwwM637.png

QoS 2

使用 QoS 2,我們保證消息僅傳送到目的地一次。為此,帶有唯一消息 ID 的消息會存儲兩次,首先來自發送者,然后是接收者。QoS 級別 2 在網絡中具有最高的開銷,因為在發送方和接收方之間需要兩個流。

poYBAGL5tWyAJGwqAABeVRCqjtY254.png

2 MQTT 數據包結構

固定頭(Fixed header),存在于所有MQTT數據包中,表示數據包類型及數據包的分組類標識;

可變頭(Variable header),存在于部分MQTT數據包中,數據包類型決定了可變頭是否存在及其具體內容;

消息體(Payload),存在于部分MQTT數據包中,表示客戶端收到的具體內容;

整體MQTT的消息格式如下圖所示;

poYBAGL5tbOAUHu9AACGk7JLpqE936.png

2.1 MQTT固定頭

固定頭存在于所有MQTT數據包中,其結構如下:

poYBAGL5tcKAMRy5AABWTizhHYM200.png

下面簡單分析一下固定頭的消息格式;

poYBAGL5tdOAKBuoAAAnLEYDJhI803.png

MQTT消息類型 / message type

**位置:**byte 1, bits 7-4。

4位的無符號值,類型如下:

pYYBAGL5tiOAAfPzAAE_v451hj8316.png

標識位 / DUP

**位置:**byte 1, bits 3-0。

在不使用標識位的消息類型中,標識位被作為保留位。如果收到無效的標志時,接收端必須關閉網絡連接:

pYYBAGL5tF-AYuUNAAE76PW5tbc321.png

00:最多一次,即:<=1

01:至少一次,即:>=1

10:一次,即:=1

11:預留

剩余長度(Remaining Length)

位置:byte 1。

固定頭的第二字節用來保存變長頭部和消息體的總大小的,但不是直接保存的。這一字節是可以擴展,其保存機制,前7位用于保存長度,后一部用做標識。當最后一位為 1時,表示長度不足,需要使用二個字節繼續保存。例如:計算出后面的大小為0

2.2 MQTT可變頭 / Variable header

MQTT數據包中包含一個可變頭,它駐位于固定的頭和負載之間。可變頭的內容因數據包類型而不同,較常的應用是做為包的標識:

RETAIN:發布保留標識,表示服務器要保留這次推送的信息,如果有新的訂閱者出現,就把這消息推送給它,如果設有那么推送至當前訂閱者后釋放。

QoS發布消息的服務質量(前面已經做過介紹),即:保證消息傳遞的次數

DUP:發布消息的副本。用來在保證消息的可靠傳輸,如果設置為 1,則在下面的變長中增加MessageId,并且需要回復確認,以保證消息傳輸完成,但不能用于檢測消息重復發送。

pYYBAGL5tHaAcLxOAAA6Zl2qmVk008.png

很多類型數據包中都包括一個2字節的數據包標識字段,這些類型的包有:

PUBLISH (QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、

SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK

2.3 Payload消息體

Payload消息體是MQTT數據包的第三部分,CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四種類型的消息 有消息體:

3 環境搭建

介紹完基礎理論部分,下面在Windows平臺上搭建一個簡單的MQTT應用,進行簡單的應用,

3.1 MQTT服務器搭建

目前MQTT代理的主流平臺有下面幾個:

pYYBAGL5tKyAS_z8AAAs1c9qTZs002.png

本文將使用 Mosquitoo 進行測試,進入到安裝頁面,下載自己電腦的系統所適配的程序;

UNSUBSCRIBE,消息體內容是要訂閱的主題。

SUBACK,消息體內容是服務器對于SUBSCRIBE所申請的主題及QoS進行確認和回復。

SUBSCRIBE,消息體內容是一系列的要訂閱的主題以及QoS。

CONNECT,消息體內容主要是:客戶端的ClientID、訂閱的Topic、Message以及用戶名和密碼

poYBAGL5tIyABLt8AADUNAfFqlQ694.png

下載頁面

安裝成功之后,進入到安裝路徑下,找到mosquitto.exe;

按住Shift,右鍵鼠標點擊空白處,然后打開Powershell,正常打開一個終端軟件即可;

輸入./mosquitto.exe -p 10086,就開啟了MQTT服務,監聽的地址是127.0.0.1,端口是10086;

輸入./mosquitto.exe -h 可以查看相應的幫助;

具體如下圖所示;

pYYBAGL5tNmAHMadAAFWkFkfC_I558.png

3.2 MQTT Client

服務器搭建好了,下面就是開啟客戶端,進行發布和訂閱,這樣就可以傳輸相應的消息。

這里我使用的是自己編譯了一個QT mqtt client 程序,是基于Qt的官方庫進行編譯的,下面打開這個軟件,下一期簡單介紹一下如何完成這個客戶端,并設置好相應參數

然后訂閱主題,就可以互相發送數據了,具體如下圖所示;

端口:10086

地址:127.0.0.1

pYYBAGL5tPOAKnmlAACcdti0ADk827.png

結合前面的圖片來看,整體的架構如下所示;

pYYBAGL5tQmACOHSAAFqB2OIzaM060.png

4 總結

本文簡單介紹了MQTT協議的工作原理,以及相應的協議格式,簡單介紹了協議的一些細節,具體舉出了相應的應用場景,作者水平和能力有限,文中難免存在錯誤和紕漏,請大佬不吝賜教。



審核編輯:劉清

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

    關注

    4

    文章

    3570

    瀏覽量

    89313
  • TCPIP協議
    +關注

    關注

    0

    文章

    35

    瀏覽量

    12007
  • MQTT協議
    +關注

    關注

    0

    文章

    98

    瀏覽量

    5487
收藏 人收藏

    評論

    相關推薦

    mqtt協議怎么用?以MQTT3.1協議ESP8266連接阿里云物聯網平臺

    于TCP/IP協議上,由IBM1999年發布。MQTT最大的優點在于可以以極少的代碼和有限的帶寬,為遠程設備提供實時可靠的消息服務。做為種低開銷、低帶寬占用的即時通訊
    的頭像 發表于 05-25 18:32 ?5892次閱讀
    <b class='flag-5'>mqtt</b><b class='flag-5'>協議</b>怎么用?以<b class='flag-5'>MQTT</b>3.1<b class='flag-5'>協議</b>ESP8266連接阿里云物聯網<b class='flag-5'>平臺</b>

    如何快速搭建MQTT協議的測試環境

    大家好,我是麥叔,之前有小伙伴建議出期如何快速搭建MQTT協議的測試環境,因為自己寫的
    的頭像 發表于 12-26 09:28 ?2193次閱讀
    如何快速<b class='flag-5'>搭建</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>的測試環境

    [MicroPython]TPYBoard v202 MQTT協議2:上傳數據點到OneNET平臺

    參考上面前言中的教程,先進行產品和設備的添加。 在數據點上報之前,我們需要在OneNET云平臺上添加數據流模板。步驟如下: 1、進入[開發者中心]的[設備管理]頁面,左側菜單欄中
    發表于 09-14 10:48

    怎么HI3516DV300上移植MQTT?

    最近......算了干筆者這行的就是塊磚,哪里缺往哪墊。簡單說就是要往款產品上用MQTT,而目前產品的開發板還沒拿到,所以先在現有的HI3516DV300上移植
    發表于 11-05 09:06

    怎樣通過MQTT協議向onenet平臺推送數據呢

    步驟如下:完成創建下載工具連接上后下面有調試信息。如下:顯示在線狀態4.發送數據到平臺上發送后平臺顯示出來用網絡助手進行設備上線,上傳數據操作???/div>
    發表于 01-13 07:16

    玩轉mqtt協議的方法

    過完年即將陷入場惡戰之中,可能無暇玩這么多東西了,趁著過年把之前直想搞的mqtt協議給玩
    發表于 02-16 06:48

    基于Dragonboard 410c開發板android平臺上搭建kinect運行環境

    繼上篇《基于qualcomm平臺的kinect教程windows配置篇》,本文我們接著來介紹基于qualcomm的android
    發表于 02-27 10:13 ?1568次閱讀

    物聯網通信協議MQTT協議介紹MQTT協議測試環境如何搭建及分析

    MQTT客戶端服務端架構的發布/訂閱模式的消息傳輸協議。 它的設計思想是輕巧、 開放、簡單、 規范, 因此易于實現。
    發表于 09-11 17:29 ?8次下載
    物聯網通信<b class='flag-5'>協議</b>之<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>介紹<b class='flag-5'>MQTT</b><b class='flag-5'>協議</b>測試環境如何<b class='flag-5'>搭建</b>及分析

    如何搭建MQTT服務器?

    協議構建于TCP/IP協議上,由IBM1999年發布。MQTT最大優點在于,可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的消息服務。作為
    的頭像 發表于 05-10 14:31 ?8192次閱讀
    如何<b class='flag-5'>搭建</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>MQTT</b>服務器?

    MQTT網關讓西門子S7-300快速接入MQTT平臺

    MQTT網關讓西門子S7-300快速接入MQTT平臺
    發表于 11-10 16:47 ?1512次閱讀

    如何在ATECLOUD平臺搭建簡單的測試demo

    ATECLOUD平臺搭建簡單的測試項目demo。 我們以測試啟動電壓的demo搭建為例。 1
    的頭像 發表于 03-28 16:13 ?1045次閱讀
    如何在ATECLOUD<b class='flag-5'>平臺</b>中<b class='flag-5'>搭建</b><b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的測試demo

    Node搭建本地MQTT服務器

    搭建MQTT、MQTT介紹MQTT種基于發布/訂閱模式的輕量級物聯網消息傳輸
    的頭像 發表于 05-26 14:11 ?1656次閱讀
    Node<b class='flag-5'>搭建</b>本地<b class='flag-5'>MQTT</b>服務器

    MQTT協議網關串口連接三菱FX3UPLC操作說明

    前言:MQTT基于客戶端-服務器的消息發布/訂閱傳輸協議MQTT協議的特點是輕量、
    發表于 08-14 15:19 ?0次下載

    MQTT物聯網平臺是什么?MQTT物聯網平臺的功能有哪些

    MQTT(Message Queuing Telemetry Transport)是種基于客戶端-服務器架構的發布/訂閱模式的消息傳輸協議。它基于TCP/IP協議棧構建,設計輕巧、開
    的頭像 發表于 01-24 09:23 ?1245次閱讀

    MQTT物聯網平臺是什么?MQTT物聯網平臺的功能

    MQTT(Message Queuing Telemetry Transport)是種基于客戶端-服務器架構的發布/訂閱模式的消息傳輸協議。它基于TCP/IP協議棧構建,設計輕巧、開
    的頭像 發表于 04-01 10:20 ?799次閱讀
    百家乐官网平台要多少钱| 大发888任务怎么做| 网上百家乐官网娱乐场开户注册| 缅甸百家乐官网赌博有假吗| 保单百家乐官网游戏机| 真人百家乐官网试玩游戏| 百家乐官网高额投注| 澳门百家乐官网如何算| 百家乐龙虎桌布| 望城县| 平博百家乐官网游戏| 百家乐官网游戏软件出售| 澳门百家乐官网会出老千吗 | 娱乐城百家乐官网可以代理吗| 百家乐官网云顶| 百家乐官网必赢法冯耘| 属鸡与属羊做生意| 圣安娜百家乐代理| 威尼斯人娱乐城是骗子| 百家乐必胜软件下载| 致胜百家乐软件| 老虎机批发| 葡京线上娱乐| 澳门百家乐官网赢技巧| 百家乐官网在线赌场娱乐网规则| 百家乐游戏论坛| 百家乐博弈之赢者理论坛| 大发888游戏安装失败| 百家乐官网打庄技巧| 百家乐官网路珠多少钱| 百家乐台布21点| 百家乐长龙技巧| 新时代娱乐城开户| 太阳城娱乐城怎么样| 百家乐官网5式直缆投注法| 百家乐官网群| 百家乐路有几家| 娱乐城开户送金| 百家乐官网大转轮| 澳门百家乐官网www.bjbj100.com| 大发888娱乐客户端|