MQTT簡介 網絡
MQTT是IBM開發的一個即時通信協議,該協議支持全部的平臺,幾乎能夠把全部聯網的物品和外部鏈接起來,被用來當作傳感器和致動器(好比經過Twitter讓房屋聯網)的通訊協議session
MQTT的特色:
使用發佈/訂閱消息模式,提供一對多的消息發佈,解除應用程序耦合。這一點很相似於XMPP,可是MQTT的信息冗餘遠小於XMPP.
對負載內容屏蔽的消息傳輸。
使用TCP/IP提供網絡鏈接。主流的MQTT是基於TCP鏈接進行數據推送的,可是一樣有基於UDP的版本,叫作MQTT-SN。這兩種版本因爲基於不一樣的鏈接方式,優缺點天然也就各有不一樣了。 架構
三種消息傳輸方式QoS:
0表明「至多一次」,消息發佈徹底依賴底層 TCP/IP 協議。會發生消息丟失或重複。這一級別可用於以下狀況,環境傳感器數據,丟失一次讀記錄無所謂,由於不久後還會有第二次發送。
1表明「至少一次」,確保消息到達,但消息重複可能會發生。
2表明「只有一次」,確保消息到達一次。這一級別可用於以下狀況,在計費系統中,消息重複或丟失會致使不正確的結果。 備註:因爲服務端採用Mosca實現,Mosca目前只支持到QoS 1
開發
簡單說明下:it
若是發送的是臨時的消息,例如給某topic全部在線的設備發送一條消息,丟失的話也無所謂,0就能夠了(客戶端登陸的時候要指明支持的QoS級別,同時發送消息的時候也要指明這條消息支持的QoS級別),io
若是須要客戶端保證能接收消息,須要指定QoS爲1,登錄
若是同時須要假如客戶端不在線也要能接收到消息,那麼客戶端登陸的時候要指定session的有效性,接收離線消息須要指定服務端要保留客戶端的session狀態。程序
MQTT是基於訂閱者模型架構的,客戶端若是互相通訊,必須是在同一訂閱主題下,即都訂閱了同一個topic,客戶端之間是沒辦法直接通信的。通信
訂閱模型顯而易見的好處是羣發消息的話只須要發佈到topic,全部訂閱了這個topic的客戶端就能夠接收到消息了。數據
發送消息必須發送到某個topic,重點說明的是無論客戶端是否訂閱了該topic,它均可以向該topic發送消息,還有若是客戶端訂閱了該主題,那麼本身發送的消息也會被接收到。