1、什麼是MQTTweb
MQTT的全稱是「 Message Queuing Telemetry Transport」,即消息隊列遙測傳輸,是一種基於訂閱/發佈模式的應用層協議,而http是一種基於restful風格的一種應用層協議。服務器
MQTT協議是一種輕量級協議,做爲一種低開銷、低帶寬佔用的即時通信協議,常被應用於物聯網項目。一樣基於訂閱/發佈模式的中間件有ActiveMQ,Kafka等消息中間件,歸根結底實現的都是消息的傳輸。restful
2、如何理解MQTT網絡
MQTT的是一種應用層協議,每一種協議都有其適用場景,而MQTT常被應用於消息推送,消息採集。例如溫度檢測儀器定時上傳溫度、檢測礦洞氧氣濃度等。socket
MQTT是基於TCP/IP的一種應用層協議,TCP/IP自己已實現了在不可靠的網絡環境提供可靠的網絡傳輸的功能,而MQTT協議也有其保障消息可靠傳輸的策略。tcp
MQTT推送的消息有三種消息質量ui
1.至多一次,即消息只推送一次,至於消息有沒有推送成功spa
2.至少一次,須要確認消息到達,可能會致使收到重複數據(注:MQTT定義的重發機制與tcp的重複機制是不一樣的,tcp的重複機制是在限定時間內若是沒有收到對應序號的響應報文,則會從新推送該序列號對應的報文,而MQTT的重發機制是在客戶端從新創建鏈接時,rest
補發以前沒有對應響應報文的數據包,固然客戶端能夠選擇是否要接收這些以前沒有傳輸成功的數據包。最開始使用netty實現MQTT服務器的時候就理解錯了,覺得MQTT的重複機制與tcp的重複機制同樣)netty
3.只有一次,確認消息只到達一次,經常使用於對數據要求嚴格的場景,例如計費場景,訂單場景
3、如何使用MQTT
MQTT的客戶端和服務端目前已有成熟的開源產品,例如服務端有emqx,客戶端有Eclipse Paho Mqtt(Java),均可以方面的引入相應的庫快速的實現推送功能(具體可根據需求查看對應的API)。
本質上來將是客戶端與服務端創建一個Socket,而後根據MQTT協議規定發送響應的報,例如創建socket後發送connet報文去創建鏈接,而後服務器會解析該鏈接報文,並保存該鏈接的相關信息。
咱們能夠把MQTT協議的規定當成是咱們實現web項目中所實現的業務邏輯。
4、MQTT協議的相關的名詞解析
1.訂閱(Subscription)
訂閱包含主題篩選器(Topic Filter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯。一個會話能夠包含多個訂閱。每個會話中的每一個訂閱都有一個不一樣的主題篩選器。
2.、會話(Session)
每一個客戶端與服務器創建鏈接後就是一個會話,客戶端和服務器之間有狀態交互。會話存在於一個網絡之間,也可能在客戶端和服務器之間跨越多個連續的網絡鏈接。
3.主題名(Topic Name)
鏈接到一個應用程序消息的標籤,該標籤與服務器的訂閱相匹配。服務器會將消息發送給訂閱所匹配標籤的每一個客戶端。
4.主題篩選器(Topic Filter)
一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。
5.負載(Payload)
消息訂閱者所具體接收的內容。