關於mqtt、mosquito的技術交流,可入羣:221779856python
本文由逍遙子撰寫,轉發請標註原址:mysql
http://blog.csdn.NET/houjixin/article/details/21461225
sql
1、 Mosquitto簡介設計模式
mosquitto是一款實現了消息推送協議MQTT v3.1 的開源消息代理軟件,提供輕量級的,支持可發佈/可訂閱的的消息推送模式,使設備對設備之間的短消息通訊變得簡單,例如如今應用普遍的低功耗傳感器,手機、嵌入式計算機、微型控制器等移動設備。服務器
Mosquitto採用出版/訂閱的模式實現MQTT協議,這種設計模式將通訊終端之間的關係統一到服務程序中進行管理,可極大減輕客戶端的開發和維護工做。網絡
1.一、 mqtt協議簡介tcp
MQTT(MessageQueuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通信協議,有可能成爲物聯網的重要組成部分。在某些應用場合中,可經過該協議維持與客戶端的長鏈接。關於mqtt協議更詳細的介紹,請參考其官方網站:http://mqtt.org/網站
其餘版本源碼下載位置:http://mosquitto.org/files/source/ui
1.二、 出版/訂閱模式簡介this
出版/訂閱模式定義瞭如何向一個節點發布和訂閱消息,這些節點被稱做主題(topic)。主題能夠被認爲是消息的傳輸中介,發佈者(publisher)發佈消息到主題,訂閱者(subscriber) 從主題訂閱消息。這種模式使得消息訂閱者和消息發佈者保持互相獨立,不須要接觸便可保證消息的傳送。
Tcp協議中,tcp鏈接只提供一對一的可靠傳輸,例如:主機A與B進行通訊,則發起tcp鏈接的一端只須要知道對方的ip地址和端口號便可,以下圖1-1所示:
圖1-1 一對一通訊
每個tcp鏈接都是由下面的五個元素肯定:
<源ip地址,源端口號,目的ip地址,目的端口號,通訊協議>
在實際程序的開發過程當中 一條鏈接創建以後,它可能須要在一段時間內一直被通訊雙方所保持,以備下次數據傳輸使用。另外,通訊的終端數目多是多個,這就須要每一個終端都要維持它全部的通訊關係,以下圖1-2所示
圖1-2 多對多通訊
此時,每一個參與通訊的客戶端所需維持的鏈接數量將很是龐大,這很是不利於程序的開發和實現。出版/訂閱模式便是一種解決這種問題的方法,它經過增長一箇中間層的方式,讓中間層來維護這種多對多的關係,這個中間層一般稱之爲服務器,以下圖1-3所示:
圖1-3 增長中間層的多對多通訊
經過增長中間層服務器,每一個客戶端都只須要維護本身同服務器之間的鏈接便可,而客戶端之間的關係則交由中間服務器來維護,這種設計模式將複雜的通訊關係維護工做從客戶端剝離出來,很是方便客戶端的開發和維護。
Mosquito程序便是經過這種方式進行工做,在mosquitto程序內部,將客戶端之間的關係經過一棵訂閱樹來維持。
1.三、 Mosquito
Mosquito源碼目錄結構介紹。
|---- mosquitto-1.2
|---- client
|---- examples
|----mysql_log
|----temperature_conversion
|---- installer
|---- lib
|---- cpp
|---- jsws
|----Python
|---- logo
|---- man
|---- po
|----libmosquitto
|----mosquitto
|----mosquitto.conf
|----mosquitto_pub
|----mosquitto_sub
|----mosquitto-tls
|----mqtt
|---- misc
|----currentcost
|----gnome-panel
|---- security
|---- service
|---- monit
|----svscan
|----upstart
|---- src
|----db_dump
|---- test
|----broker
|---- c
|---- lib
|---- c
|----cpp
|----python
|----python3
|---- ssl
|----demoCA
|----rootCA
|----signingCA
所需關注的目錄有/ mosquitto-1.2/src、/ mosquitto-1.2/lib、/ mosquitto-1.2/client三個目錄,其中src和lib目錄下主要放置mosquitto的實現代碼以及部分底層與網絡相關的操做,client目錄主要爲兩個客戶端程序的實現源碼。
Mosquito的源碼及其相關文檔可從其官方網站獲取,其官方網站爲:http://mosquitto.org/
mosquitto客戶端和服務器運行命令
[1] 發佈者客戶端運行命令示例:./mosquitto_pub -h 192.168.6.243 -p 1883 -t "111" -m "this is jason.hou" -u 111 -P 111[2] 訂閱者客戶端運行命令示例:./mosquitto_sub -h 192.168.6.243 -i 111 -p 1883 -t 111 -k 60 -d -c -u hjx -P hjx[3] mosquitto服務器端運行命令示例:./mosquitto