http://blog.csdn.net/xukai871105/article/details/39252653html
0 前言linux
MQTT是IBM開發的一個即時通信協議。MQTT是面向M2M和物聯網的鏈接協議,採用輕量級發佈和訂閱消息傳輸機制。
Mosquitto是一款實現了 MQTT v3.1 協議的開源消息代理軟件,提供輕量級的,支持發佈/訂閱的的消息推送模式,使設備對設備之間的短消息通訊簡單易用。
若初次接觸MQTT協議,可先理解如下概念:
【MQTT協議特色】——相比於RESTful架構的物聯網系統,MQTT協議藉助消息推送功能,能夠更好地實現遠程控制。
【MQTT協議角色】——在RESTful架構的物聯網系統,包含兩個角色客戶端和服務器端,而在MQTT協議中包括髮布者,代理器(服務器)和訂閱者。
【MQTT協議消息】——MQTT中的消息可理解爲發佈者和訂閱者交換的內容(負載),這些消息包含具體的內容,能夠被訂閱者使用。
【MQTT協議主題】——MQTT中的主題可理解爲相同類型或類似類型的消息集合。
截止2015年12月,最新版本爲mosquitto-1.4.5
# 下載源代碼包
【1】編譯找不到openssl/ssl.h
【解決方法】——安裝openssl
sudo 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 參考資料