MQTT 是一個基於發布/訂閱模式的消息傳輸協議。它具有輕量級、開放、簡單,易於實現,通信帶寬要求低等特點。這些特點使得它對機器與機器的通信(M2M)以及物聯網應用(IoT)來說是很好的選擇。它還被應用到手機APP和Web應用中。
MQTT於1999年由Andy Stanford-Clark(IBM)和Arlen Nipper(Arcom,現為Cirrus Link)發明,最初的應用是為了以最小的電池損耗和最小網絡帶寬將石油管道數據通過衛星進行傳輸。在MQTT最初版本發布3年后,OASIS開源組織接管MQTT的標准化制定工作。MQTT如今的最新版本為MQTT3.1.1,相比MQTT3.1的變動很小,但還是鼓勵使用3.1.1版本,3.1.1已經成為了ISO標准。

客戶端/服務器模式 vs 發布/訂閱模式
傳統的網絡通信模式幾乎都是基於客戶端/服務器模式的:客戶端直接和一個服務端建立連接,通信來獲取數據,數據源和數據目的地雙方直接連接。比如在Web應用程序中,瀏覽器直接和Web服務器通過HTTP協議通信,瀏覽器需要知道服務器的IP和端口號。
而發布/訂閱模式解耦了客戶端,客戶端分為2種角色:發布者(Publisher)和訂閱者(Subscriber)。每一個發布者(Publisher)可以發送不同類型的消息,我們把消息的類型叫做主題(topic),MQTT通信中的消息都屬於某一個主題 ,而只有訂閱了這個主題的訂閱者(Subscriber)才能收到屬於這個主題的消息。發布者和訂閱者不需要在意和知道對方的存在(不需要知道對方的IP和端口),也不需要直接與對方建立連接。因為通信中存在着一個叫代理(MQTT broker)的第三種角色,也可以叫MQTT服務器(MQTT server)。
發布者、訂閱者只需要知道MQTT 服務器的IP和端口即可,並和它直接建立連接通信。MQTT代理作為消息的中轉,它過濾所有接受到的消息,並按照一定的機制(MQTT標准規定是基於主題的消息過濾派發方式,而具體的MQTT服務器軟件也提供了其他的派發方式)分發它們,使得所有注冊到MQTT代理的訂閱者只接收到他們訂閱了的消息,而不會收到他不關心的消息。
當發布者發布一條消息的時候,他必須同時指定消息的主題和消息的負載。MQTT代理在收到發布者發過來的消息時,無需訪問消息負載,他只是訪問消息的主題信息,然后根據這主題派發給訂閱者。需要注意的是,一個客戶端可以同時既當發布者又當訂閱者。比如一個開發板連接了一盞LED燈,它可以發布燈的暗/亮狀態信息,也可以從其他節點訂閱對燈的控制消息。

搭建MQTT服務器
需求項目 | 實際使用 | 其它替代品 |
---|---|---|
MQTT服務器軟件 | mosquitto |
/ |
公網服務器 | VPS,Ubuntu系統,帶一個IPv4地址 | 阿里雲,騰訊雲等 |
遠程登錄軟件 | FinalShell | putty等 |
1、安裝
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa #添加源到軟件倉庫 sudo apt-get update #更新軟件倉庫列表 sudo apt-get install mosquitto #安裝mosquitto
2、試運行
sudo service mosquitto status #查看運行狀態 sudo service mosquitto start #啟動服務 sudo service mosquitto stop #停止服務
3、添加和修改配置
sudo service mosquitto stop #首先停止服務 #用戶的局部配置文件放在: /etc/mosquitto/conf.d/目錄下,並且這個目錄下的所有以.conf后綴的文件都將被mosquitto作為配置文件,在啟動時加載。 #在/etc/mosquitto/conf.d目錄下,新建myconfig.conf配置文件 #在其中輸入如下內容 #------------------------------------------- # 關閉匿名訪問,客戶端必須使用用戶名 allow_anonymous false #指定 用戶名-密碼 文件 password_file /etc/mosquitto/pwfile.txt #--------------------------------------------
4、創建一個MQTT服務器賬戶
假設用戶名為:user1 在命令行運行:mosquitto_passwd -c /etc/mosquitto/pwfile.txt user1 回車后連續輸入2次用戶密碼即可
5、重新啟動mosquitto
sudo service mosquitto start #啟動服務
測試mosquitto
在App Store下載MQTTool工具。
訂閱一個消息,主題為test
發布主題為test的消息,點擊發送后,點底部的Subscribe,看是否收到了推送。
作者:lulipro-代碼鋼琴家
出處:http://www.cnblogs.com/lulipro/
本文版權歸作者和博客園共有,歡迎轉載。限於本人水平,如果文章和代碼有表述不當之處,還請不吝賜教。