日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

物聯(lián)網(wǎng)核心之MQTT

 美目揚(yáng) 2018-01-08

       MQTT,目前物聯(lián)網(wǎng)的最主要的協(xié)議,基本所有收費(fèi)的云平臺(tái)都是基于MQTT協(xié)議,比如機(jī)智云,和所有的開(kāi)放云平臺(tái)比如中國(guó)移動(dòng)的oneNet、百度的云平臺(tái)也都支持MQTT的接入。雖然MQTT很火,但是目前對(duì)MQTT的很少,尤其是在如何移植到嵌入式上來(lái)。大部分的平臺(tái)商的做法都是跟模塊商合作把MQTT協(xié)議集成到WiFi模塊跟GPRS模塊里面,捆綁一銷(xiāo)售,不讓用戶(hù)過(guò)多的了解物聯(lián)網(wǎng)最核心的東西。


    在還沒(méi)有深入去了解MQTT協(xié)議之前,總以為是非常復(fù)雜的東西,畢竟之前一直想深入,但無(wú)奈在浩淼的網(wǎng)絡(luò)里居然找不到太多實(shí)質(zhì)的資料。隨時(shí)自己對(duì)物聯(lián)網(wǎng)的不斷探索,越來(lái)越了解整個(gè)物聯(lián)網(wǎng)的架構(gòu),對(duì)MQTT了解越來(lái)越深入。在這篇文章中將帶大家先了解MQTT的協(xié)議,在后面的文章,再帶大家怎么移植MQTT到STM32上,再到怎么搭建自己的MQTT服務(wù)器。


      MQTT的基礎(chǔ)知識(shí)這些大家通過(guò)百度知道都可以了解到,這里主要深入去剖析MQTT協(xié)議的整個(gè)通信流程。整個(gè)MQTT的知識(shí)大家可以去附件里的《MQTT OneNET實(shí)現(xiàn).docx》,這個(gè)文檔已經(jīng)寫(xiě)的非常詳細(xì),但是如果只是看文字話(huà),大家很難理解。因此我們借助Windows下的MQTT客戶(hù)端MQTT.fx跟網(wǎng)絡(luò)抓包工具Wireshark來(lái)一步步分析MQTT。

名字

流向

描述

CONNECT

1

C->S

客戶(hù)端請(qǐng)求與服務(wù)端建立連接

CONNACK

2

S->C

服務(wù)端確認(rèn)連接建立

PUBLISH

3

CóS

發(fā)布消息

PUBACK

4

CóS

收到發(fā)布消息確認(rèn)

PUBREC

5

CóS

發(fā)布消息收到

PUBREL

6

CóS

發(fā)布消息釋放

PUBCOMP

7

CóS

發(fā)布消息完成

SUBSCRIBE

8

C->S

訂閱請(qǐng)求

SUBACK

9

S->C

訂閱確認(rèn)

UNSUBSCRIBE

10

C->S

取消訂閱

UNSUBACK

11

S->C

取消訂閱確認(rèn)

PING

12

C->S

客戶(hù)端發(fā)送PING(連接?;?命令

PINGRSP

13

S->C

PING命令回復(fù)

DISCONNECT

14

C->S

斷開(kāi)連接

    上面是MQTT的主要的通信協(xié)議,MQTT是基于TCP長(zhǎng)連接,首先是先跟MQTT服務(wù)器建立TCP連接,然后發(fā)送登錄請(qǐng)求,要保持長(zhǎng)連接,還要定時(shí)發(fā)心跳包跟服務(wù)保持連接。我們先用MQTT.fx來(lái)登錄開(kāi)源的MQTT服務(wù)看看。

    安裝好MQTT.fx(注意MQTT.fx是java開(kāi)發(fā)的,電腦要安裝JDK才能安裝打開(kāi)),一打開(kāi)里面就默認(rèn)有一個(gè)開(kāi)源的MQTT服務(wù)M2M Eclipse。點(diǎn)開(kāi)旁邊的齒輪(設(shè)置按鈕)可以看服務(wù)器的域名m2m.eclipse.org,端口號(hào)1833(MQTT的默認(rèn)端口號(hào)),下面還有個(gè)Keep Alive Interval就是心跳的時(shí)間。再打開(kāi)Wireshark,選擇要捕獲的網(wǎng)絡(luò)接口,然后再過(guò)濾器輸入tcp.port==1883后回車(chē),只捕獲1883這個(gè)端口號(hào)的數(shù)據(jù)包。再點(diǎn)下MQTT.fx的Connect連接服務(wù)器,就可以看到Wireshark捕到的數(shù)據(jù)


    可以看到MQTT協(xié)議中本地給服務(wù)器發(fā)送了一個(gè)Connect登錄請(qǐng)求,然后,服務(wù)器回應(yīng)一個(gè)ACK,表示登錄成功。再雙擊Connect Command這條數(shù)據(jù)包,我們可以看到詳細(xì)的數(shù)據(jù)包數(shù)據(jù)

    上面的解析出來(lái)的MQTT協(xié)議包的內(nèi)部,下面是對(duì)應(yīng)的二進(jìn)制數(shù)據(jù),這里我們可以對(duì)照附件上資料去了解協(xié)議的內(nèi)容??催@里,大家想是不是如果自己用TCP,再封裝發(fā)送下面的二進(jìn)制數(shù)據(jù)就可以完成MQTT的登錄了呢?拿出網(wǎng)絡(luò)調(diào)試助手來(lái),ping下m2m.eclipse.org得到IP地址,用端口號(hào)1883連接,然后發(fā)送Wireshark捕到的MQTT登錄協(xié)議的二進(jìn)制數(shù)據(jù),可以看到到服務(wù)器回應(yīng)了 20 02 00 00 表示登錄成功。

    再往下Wireshark捕到的數(shù)據(jù)包,可以看到每隔一定的時(shí)間,本地向服務(wù)器發(fā)送Ping Request心跳包,相應(yīng)的服務(wù)器也會(huì)回應(yīng)Ping Response。

    接下來(lái)看MQTT最核心的傳輸協(xié)議 Subcribe(定閱)和Publish(推送)。簡(jiǎn)單來(lái)說(shuō)就是客戶(hù)端口(比如物聯(lián)網(wǎng)硬件)Subcribe一個(gè)topic(主題)后,其它的客戶(hù)端(比如手機(jī))向服務(wù)器往這個(gè)topic 推送 Payload(有效數(shù)據(jù)),服務(wù)器就會(huì)把Payload轉(zhuǎn)發(fā)給定閱這個(gè)topic的客戶(hù)端(硬件)。


這樣就實(shí)現(xiàn)了客戶(hù)端(手機(jī))通過(guò)服務(wù)器(MQTT)遠(yuǎn)程發(fā)送數(shù)據(jù)給客戶(hù)端(物聯(lián)網(wǎng)硬件)。一樣用MQTT.fx來(lái)實(shí)驗(yàn)。先點(diǎn)Subscribe然后面下面輸入led再點(diǎn)旁邊的Subscribe按鈕來(lái)定閱led這個(gè)topic。然后回到Publish,一樣在輸入框輸入led這個(gè)topic,下面大框就是輸入要推送的數(shù)據(jù),輸入on,再點(diǎn)Publish按鈕,就把數(shù)據(jù)推送出去了。再回到Subcribe界面來(lái)可以看到右邊已經(jīng)收到有推送過(guò)來(lái)的數(shù)據(jù)。如果這是硬件收到這個(gè)指令,就可以去控制點(diǎn)亮LED,我們就實(shí)現(xiàn)遠(yuǎn)程控制LED燈。

   想深入了解MQTT這一個(gè)過(guò)程的話(huà),我們?cè)倩氐絎ireshark,來(lái)看看捕獲到的數(shù)據(jù)

    具體的就不詳細(xì)的分析了,大家看附件的文檔來(lái)對(duì)照就可以很容易了解到。

    最后來(lái)了解下QoS(定閱等級(jí)),分0、1、2三個(gè)等級(jí),簡(jiǎn)單來(lái)說(shuō)是等級(jí)越高越可靠。QoS0,就是推送之后就完事了,至于對(duì)方有沒(méi)有收到,收到是什么,數(shù)據(jù)有沒(méi)有丟失,都不管。


QoS1的話(huà)就是你收到推送后,你還得返回一個(gè)puback給對(duì)方,告訴對(duì)方收到了,不然對(duì)方會(huì)以為你沒(méi)收到,隔一段時(shí)間后重新給你推送,直到你給對(duì)方返回一個(gè)Puback為止。

    好了,基本的就寫(xiě)到這,剩下的大家可以根據(jù)這個(gè)方法對(duì)照文檔去消化MQTT。

鏈接:http://pan.baidu.com/s/1bp2MbIB 密碼:hvkp


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多