久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7698|回復: 0
打印 上一主題 下一主題
收起左側

MQTT學習筆記—MQTT協議體驗 Mosquitto安裝和使用

[復制鏈接]
跳轉到指定樓層
樓主
ID:140343 發表于 2016-9-25 11:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
0 前言

    MQTT是IBM開發的一個即時通訊協議。MQTT是面向M2M和物聯網的連接協議,采用輕量級發布和訂閱消息傳輸機制。Mosquitto是一款實現了 MQTT v3.1 協議的開源消息代理軟件,提供輕量級的,支持發布/訂閱的的消息推送模式,使設備對設備之間的短消息通信簡單易用。
    若初次接觸MQTT協議,可先理解以下概念:
【MQTT協議特點】——相比于RESTful架構的物聯網系統,MQTT協議借助消息推送功能,可以更好地實現遠程控制
【MQTT協議角色】——在RESTful架構的物聯網系統,包含兩個角色客戶端和服務器端,而在MQTT協議中包括發布者,代理器(服務器)和訂閱者
【MQTT協議消息】——MQTT中的消息可理解為發布者和訂閱者交換的內容(負載),這些消息包含具體的內容,可以被訂閱者使用。
【MQTT協議主題】——MQTT中的主題可理解為相同類型或相似類型的消息集合。

1 安裝和使用注意點
1.1 安裝



    截止2015年12月,最新版本為mosquitto-1.4.5

# 下載源代碼包



wget http://mosquitto.org/files/source/mosquitto-1.4.5.tar.gz# 解壓
tar zxfv mosquitto-1.4.5.tar.gz
# 進入目錄
cd mosquitto-1.4.5

# 編譯

make
# 安裝
sudo make install





1.2 安裝注意點



【1】編譯找不到openssl/ssl.h
    【解決方法】——安裝opensslsudo apt-get install libssl-dev



【2】編譯過程找不到ares.h
sudo apt-get install libc-ares-dev
【3】編譯過程找不到uuid/uuid.h
sudo apt-get install uuid-dev
【4】使用過程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory


    【解決方法】——修改libmosquitto.so位置

# 創建鏈接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
# 更新動態鏈接庫
sudo ldconfig
【5】make: g++:命令未找到  
    【解決方法】
    安裝g++編譯器
sudo apt-get install g++



2 簡單測試
    一個完整的MQTT示例包括一個代理器,一個發布者和一個訂閱者。測試分為以下幾個步驟:
【1】啟動服務mosquitto。
【2】訂閱者通過mosquitto_sub訂閱指定主題的消息。
【3】發布者通過mosquitto_pub發布指定主題的消息。
【4】代理服務器把該主題的消息推送到訂閱者。

【測試說明】
    測試環境:ubuntu 14.04 虛擬機
    在本例中,發布者、代理和訂閱者均為localhsot,但是在實際的情況下三種并不是同一個設備,在mosquitto中可通過-h(--host)設置主機名稱(hostname)。為了實現這個簡單的測試案例,需要在linux中打開三個控制臺,分別代表代理服務器、發布者和訂閱者。



圖1 示例

2.1 啟動代理服務

mosquitto -v
    【-v】打印更多的調試信息

2.2 訂閱主題
mosquitto_sub -v -t sensor

    【-t】指定主題,此處為sensor

    【-v】打印更多的調試信息

2.3 發布內容
mosquitto_pub -t sensor  -m 12

    【-t】指定主題
    【-m】指定消息內容


2.4 運行結果
    當發布者推送消息之后,訂閱者獲得以下內容
sensor 12
    而代理服務器控制臺中會出現——連接、消息發布和心跳等調試信息。通過代理服務器的調試輸出可以對MQTT協議的相關過程有所了解。


圖2 代理服務器調試輸出


3 總結
    通過Mosquitto實現MQTT協議代理器(服務器),為今后的MQTT協議應用做準備。本文并沒有分析MQTT協議的種種細節,但是希望通過一個簡單的例子把MQTT協議“使用起來”,通過使用過程來理解MQTT協議,在過程中關注細節收集疑問,再閱讀MQTT協議具體內容,這樣學習起來就不至于枯燥乏味(即使MQTT協議只有40多頁,但是初次閱讀我還是沒能理解其內涵,只能怪自己智商太低,學術不精。)



4 參考資料
【1】Mosquitto簡要教程(安裝/使用/測試)
【2】解決編譯過程中找不到ares.h的問題
【3】解決使用過程中找不到libmosquitto.so.1的問題

==============================================================


MQTT - MQ Telemetry Transport
  • 輕量級的 machine-to-machine 通信協議。
  • publish/subscribe模式。
  • 基于TCP/IP。
  • 支持QoS。
  • 適合于低帶寬、不可靠連接、嵌入式設備、CPU內存資源緊張。
  • 是一種比較不錯的Android消息推送方案。
  • FacebookMessenger采用了MQTT。
  • MQTT有可能成為物聯網的重要協議。


消息體




MessageType



CONNECT
TCP連接建立完畢后,Client向Server發出一個Request。
如果一段時間內接收不到Server的Response,則關閉socket,重新建立一個session連接。
如果一個ClientID已經與服務器連接,則持有同樣ClientID的舊有連接必須由服務器關閉后,新建立才能建立。

CONNACK
Server發出Response響應。
0x00 Connection Accepted
0x01 Connection Refused: unacceptable protocol version
0x02 Connection Refused: identifier rejected
0x03 Connection Refused: server unavailable
0x04 Connection Refused: bad user name or password
0x05 Connection Refused: not authorized


PUBLISH 發布消息
Client/Servier均可以進行PUBLISH。
publish message 應該包含一個TopicName(Subject/Channel),即訂閱關鍵詞。

關于Topic通配符
/:用來表示層次,比如a/b,a/b/c。
#:表示匹配>=0個層次,比如a/#就匹配a/,a/b,a/b/c。
單獨的一個#表示匹配所有。
不允許 a#和a/#/c。
+:表示匹配一個層次,例如a/+匹配a/b,a/c,不匹配a/b/c。
單獨的一個+是允許的,a+不允許,a/+/b不允許

PUBACK 發布消息后的確認
QoS=1時,Server向Client發布該確認(Client收到確認后刪除),訂閱者向Server發布確認。

PUBREC / PUBREL / PUBCOMP
QoS=2時
1. Server->Client發布PUBREC(已收到);
2. Client->Server發布PUBREL(已釋放);
3. Server->Client發布PUBCOMP(已完成),Client刪除msg;
訂閱者也會向Server發布類似過程確認。

PINGREQ / PINGRES 心跳
Client有責任發送KeepAliveTime時長告訴給Server。在一個時長內,發送PINGREQ,Server發送PINGRES確認。
Server在1.5個時長內未收到PINGREQ,就斷開連接。
Client在1個時長內未收到PINGRES,斷開連接。
一般來說,時長設置為幾個分鐘。最大18hours,0表示一直未斷開。


QoS



QoS=0:最多一次,有可能重復或丟失。

QoS=1:至少一次,有可能重復。
Client[Qos=1,DUP=0/*重復次數*/,MessageId=x] --->PUBLISH--> Server收到后,存儲Message,發布,刪除,向Client回發PUBACK
Client收到PUBACK后,刪除Message;如果未收到PUBACK,設置DUP++,重新發送,Server端重新發布,所以有可能重復發送消息。

QoS=2:只有一次,確保消息只到達一次(用于比較嚴格的計費系統)。


Clean Session
如果為false(flag=0),Client斷開連接后,Server應該保存Client的訂閱信息。
如果為true(flag=1),表示Server應該立刻丟棄任何會話狀態信息。



Refshttp://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html


================================================================
http://baike.baidu.com/link?url=dDQ_3ey8tTgxKq8bDT55aNTvU8D102xr9HE27JH0HU7l81TiYmFIxV_CQwP-kV6yhBaYp_peebv57cdTKYg-u_



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕电影在线观看 | 中国一级毛片免费 | 中文字幕91av| 国产成人麻豆免费观看 | 在线观看成人免费视频 | 日韩在线视频精品 | 日韩在线 | 亚洲激情网站 | 视频一区在线 | av一区二区三区 | 久久99精品久久久水蜜桃 | 中文字幕一区二区在线观看 | 91在线网站 | 国产精品毛片一区二区三区 | 国产视频亚洲视频 | 午夜精品福利视频 | 欧美色人| 九九99久久 | 国产一区二区 | 国产精品视频999 | 日韩在线视频免费观看 | 欧美a在线 | 久久99精品久久久久久国产越南 | 久久久久免费精品国产 | 亚洲一区二区三区四区五区中文 | 国产最新视频在线 | 色综合色综合色综合 | 91av视频在线免费观看 | 懂色av一区二区三区在线播放 | 亚洲精品99久久久久久 | 中文字幕在线精品 | 国产综合久久 | 天天操天天摸天天爽 | 在线成人www免费观看视频 | 91社区在线观看播放 | 国产精品国产精品国产专区不卡 | 丝袜一区二区三区 | 亚洲精品国产a久久久久久 午夜影院网站 | 美女国产精品 | 免费的色网站 | 日日摸天天添天天添破 |