MQTT協議學習及實踐(Linux服務端,Android客戶端的例子)
前言
MQTT(Message Queuing Telemetry Transport),是一個物聯網傳輸協議,它被設計用於輕量級的發布/訂閱式消息傳輸,旨在為低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務。MQTT是專門針對物聯網開發的輕量級傳輸協議。MQTT協議針對低帶寬網絡,低計算能力的設備,做了特殊的優化,使得其能適應各種物聯網應用場景。本文旨在研究其在消息發布/訂閱/接收場景下的應用.
MQTT協議中的幾個重要概念
-
服務端
是發送消息的客戶端和請求訂閱的客戶端之間的中介,又稱為broker.它接收來自客戶端的網絡連接;接收客戶端發布的消息;處理客戶端的訂閱和取消訂閱請求;轉發相應消息給符合條件的已訂閱客戶端.
-
客戶端
訂閱相關的消息;發布消息給其它相關的客戶端
-
訂閱
訂閱包含一個主題過濾器和一個最大的服務質量(QoS)等級.客戶端只有訂閱了相關主題時,才能接收到對應主題的消息
mosquitto編譯安裝及使用
mosquitto是一款實現了MQTT協議v3.1版的開源消息代理軟件,下載地址https://mosquitto.org/download/,使用的是目前最新的版本1.4.10
tar xvf mosquitto-1.4.10.tar.gz cd mosquitto-1.4.10 vi config.mk(將WITH_SRV:=yes中的yes改為no,否則會報ares.h文件找不到的錯誤) make sudo make install
如果不做全局安裝的話,需要將lib/libmosquitto.so.1動態庫拷貝到/usr/lib/下,然後執行,否則會報動態庫無法使用的錯誤.
安裝完畢後,我們來模擬下整個信息推送的過程.
我們用3個Terminal分別表示broker,訂閱者和發布者.
Terminal A啟動mosquitto broker服務,它可以監聽到所有的交互過程
mosquitto
Terminal B開啟訂閱服務,之後所有關於該訂閱主題的消息,它都能接收到
mosquitto_sub -v -t shopping
參數-v顯示詳細信息,-t表示主題
Terminal C發布消息
mosquitto_pub -t shopping -m "What a nice day! Go shopping with me?"
參數-t表示主題,-m表示具體消息的內容
mtqq_mosquitto
MQTT Androd客戶端
利用MQTT3的java實現代碼,做了簡單的android客戶端
mtqq_mosquitto
主界面上放了4個按鈕,分別對應連接,訂閱,發布和斷開連接4個操作.在操作之前,必須先啟動MQTT服務,我這服務器的ip地址是10.10.10.48,然後在android端按下CONNECT按鈕,可以看到logcat的連接成功的打印信息,接著再按下SUBSCRIBE的按鈕完成主題為shopping的訂閱(作為demo,我這裏寫死了).為了接收到android端發布的信息,我在服務器端打開了一個終端,同樣訂閱了shopping為主題的消息.一切準備工作就緒後,按下android端的PUBLISH,完成之後,就可以在訂閱的終端看到shopping What a nice day! Go shopping with me?的主題消息.
mtqq_mosquitto
mtqq_mosquitto
android端除了可以發送消息,當然也可以接收.打開另一個終端,發布一條主題為shopping的消息
mosquitto_pub -t shopping -m "Sorry,I have no time."
可以看到android中的logcat,顯示已經接收到了相應的消息.
mtqq_mosquitto
mtqq_mosquitto
Android工程下載
https://github.com/djstava/MqttClientAndroid
參考文獻
1 https://mosquitto.org/documentation/
2 http://tokudu.com/post/50024574938/how-to-implement-push-notifications-for-android
3 http://blog.csdn.net/xukai871105/article/details/39252653
4 http://mqtt.org/
5 https://github.com/LichFaker/MqttClientAndroid
作者:djstava
鏈接:http://www.jianshu.com/p/a7de93895416
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。 http://www.jianshu.com/p/a7de93895416
MQTT協議學習及實踐(Linux服務端,Android客戶端的例子)