MQTT簡介
MQTT定義
MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議,有可能成爲物聯網的重要組成部分。該協議支持所有平臺,幾乎可以把所有聯網物品和外部連接起來,被用來當做傳感器和制動器(比如通過Twitter讓房屋聯網)的通信協議。
MQTT特點
MQTT協議是爲大量計算能力有限,且工作在低帶寬、不可靠的網絡的遠程傳感器和控制設備通訊而設計的協議,它具有以下主要的幾項特性:
1.使用發佈/訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合;
2.對負載內容屏蔽的消息傳輸;
3.使用 TCP/IP 提供網絡連接;
4.有三種消息發佈服務質量:
“至多一次”,消息發佈完全依賴底層 TCP/IP 網絡。會發生消息丟失或重複。這一級別可用於如下情況,環境傳感器數據,丟失一次讀記錄無所謂,因爲不久後還會有第二次發送。
“至少一次”,確保消息到達,但消息重複可能會發生。
“只有一次”,確保消息到達一次。這一級別可用於如下情況,在計費系統中,消息重複或丟失會導致不正確的結果。
5.小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量;
6.使用 Last Will 和 Testament 特性通知有關各方客戶端異常中斷的機制;
MQTT特徵原理
實現MQTT協議需要:客戶端和服務器端
MQTT協議有三種身份:發佈者(Pushlish)、代理(Broker)、訂閱者(Subscribe)
MQTT的消息分爲:主題(Topic)和負載(payload)兩部分
Topic,可以理解爲消息的類型,訂閱者Subscribe之後,就會收到該主題的消息內容(payload)。
payload,可以理解爲消息的內容,是指訂閱者具體的使用內容
消息類型:
CONNECT:客戶端連接到MQTT代理
CONNACK:連接確認
PUBLISH:新發布消息
PUBACK:新發布消息確認,是QoS 1給PUBLISH消息的回覆
PUBREC:QoS 2消息流的第一部分,表示消息發佈已記錄
PUBREL:QoS 2消息流的第二部分,表示消息發佈已釋放
PUBCOMP:QoS 2消息流的第三部分,表示消息發佈完成
SUBSCRIBE:客戶端訂閱某個主題
SUBACK:對於SUBSCRIBE消息的確認
UNSUBSCRIBE:客戶端終止訂閱的消息
UNSUBACK:對於UNSUBSCRIBE消息的確認
PINGREQ:心跳
PINGRESP:確認心跳
DISCONNECT:客戶端終止連接前優雅地通知MQTT代理
MQTT應用
通過MQTT協議,目前已經擴展出了數十個MQTT服務器端程序,可以通過PHP,JAVA,Python,C,C#等系統語言來向MQTT發送相關消息。
此外,國內很多企業都廣泛使用MQTT作爲Android手機客戶端與服務器端推送消息的協議。其中Sohu,Cmstop手機客戶端中均有使用到MQTT作爲消息推送消息。據Cmstop主要負責消息推送的高級研發工程師李文凱稱,隨着移動互聯網的發展,MQTT由於開放源代碼,耗電量小等特點,將會在移動消息推送領域會有更多的貢獻,在物聯網領域,傳感器與服務器的通信,信息的收集,MQTT都可以作爲考慮的方案之一。在未來MQTT會進入到我們生活的各各方面。
百度物接入loT及MQTT測試
配置
1.註冊百度雲賬號,打開物接入界面:
2.在管理控制平臺創建:
3.點擊剛纔創建的實例名稱,並創建設備:
4.填寫身份、策略、主題等信息
需要注意的是Topic和生成的密鑰一定要記住,如果密鑰丟了的話只能去重置密鑰了。
基本配置就是這些了。
MQTT連接測試
1.點擊連接測試:
2.填寫剛纔生成密鑰,以及用戶名稱,然後點擊Connect
3.連接之後開始測試,填寫一下你剛纔設置的主題,比如我設置的主題是qzsservice,步驟如下:
發送後底下就會顯示Messages信息了,說明測試成功!
百度物接入服務器與手機連接測試
上面我們已經講完了百度物接入怎麼創建實例+連接測試了,下面講一下連接測試發送消息怎麼與手機程序相連。也就是服務器發送一條消息,手機程序接收。:
首先需要引入兩個包:
然後就是通過一系列的操作:
創建MQTT連接 createconnect
訂閱主題subscribe
代碼我就不展示了,文末會貼出源碼下載的地址
測試步驟:
1.完成第二部分的內容,記下生成的topic,server_utl,用戶名,密鑰
2.在手機程序Constants加入這些數據
3.運行程序,輸入訂閱的主題,如果顯示“訂閱主題成功”說明成功了,此時再MQTT服務器上發送一條消息,觀察log,會顯示收到的消息。
源碼獲取:加我的微信:lengquele5311
我的QQ羣:
歡迎加入程序員招聘(內推)圈,羣聊號碼:810279701
大家可以關注我的微信公衆號:「秦子帥」一個有質量、有態度的公衆號!