文章目錄
- 前言
- 一、MQTT協議介紹
- 1. 物聯網的通信協議:
- 2.MQTT 協議特點
- 3. MQTT協議設計規范
- 4.MQTT協議主要特性
- 5.MQTT協議實作方式
- 6.MQTT客戶端
- 7.MQTT服務器端
- 8. 發布/訂閱、主題、會話
- 9. MQTT協議中的方法
- 10.MQTT協議資料包結構
- 二、EMQX簡介
- 1. EMQ X服務端環境搭建與配置
- 1.1安裝
- 1.2啟動
前言
EMQX官方檔案:EMQX官方檔案
一、MQTT協議介紹
1. 物聯網的通信協議:
設備與設備之間要進行互動 這個應該是什么樣的格式 設備與平臺 設備與人要進行互動 這個資料應該是什么格式 都是協議來定義的
物聯網的協議必須針對物聯網的通信有幾個關鍵的問題需要解決
第一個問題 :
物聯網設備所處的網路環境復雜 :
比如有的地方設備環境網路不是特別穩 有的設備所在環境相對比較好
這可能會導致有一些設備一會在線 一會不在線
那設備與設備 設備與平臺之間要進行訊息的互動 因為網路的原因 這些資料有可能被接收到也有可能會接收不到 那這個通信協議就必須具備能保證這個訊息資料整體發送的質量 就是訊息一定 要被接收到
第二個問題 :
這些物理設備在這個設備上裝一些芯片 傳感器 那么這些芯片上都會去嵌入一些程式 那這些程式在運行程序中 記憶體不是很大 處理能力不強 那么在芯片上的程式不能特別大
處理資料不能特別繁瑣 也不能去處理很大量的資料 那這些問題都是物聯網通信協議需要去考慮的問題
MQTT協議就是專門在物聯網行業中對這些問題有非常好的解決方案
MQTT 是基于 Publish/Subscribe 模式的物聯網通信協議,憑借簡單易實作、支持 QoS、報文小等特點,占據了物聯網協議的半壁江山:
mqtt官網:http://mqtt.org/
mqtt中文網:http://mqtt.p2hp.com/
傳統的請求回應模型 服務端不會主動發送請求給客戶端 一個請求對應一個回應


2.MQTT 協議特點
1.簡單.
2.支持訊息服務質量 解決因為網路環境的復雜.不可靠導致的訊息不能被安全可靠傳輸的問題
3.發送的報文資料小 占用帶寬小 解決芯片存盤數小的問題

一次訂閱成功之后 后續只要客戶端有資料發送過來
MQTT服務端主動將資料推送給pc端或者手機端
極少的代碼有限的帶寬 為遠程的一些設備提供實時可靠的訊息服務本身性能網路開銷小

3. MQTT協議設計規范
由于物聯網的環境是非常特別的,所以MQTT遵循以下設計原則:
(1)精簡,不添加可有可無的功能;
(2)發布/訂閱(Pub/Sub)模式,方便訊息在傳感器之間傳遞,解耦Client/Server模式,帶來的好處在于不必預先知道對方的存在(ip/port),不必同時運行;
(3)允許用戶動態創建主題(不需要預先創建主題),零運維成本;
(4)把傳輸量降到最低以提高傳輸效率;
(5)把低帶寬、高延遲、不穩定的網路等因素考慮在內;
(6)支持連續的會話保持和控制(心跳);
(7)理解客戶端計算能力可能很低;
(8)提供服務質量( quality of service level:QoS)管理;
(9)不強求傳輸資料的型別與格式,保持靈活性(指的是應用層業務資料),
4.MQTT協議主要特性
MQTT協議作業在低帶寬、不可靠的網路的遠程傳感器和控制設備通訊,而設計的協議,它具有以下主要的幾項特性;
(1)開放訊息協議,簡單易實作,
(2)使用發布/訂閱訊息模式,提供一對多的訊息發布,解除應用程式耦合,
(3)對負載(協議攜帶的應用資料)內容屏蔽的訊息傳輸,
(4)基于TCP/IP網路連接,提供有序,無損,雙向連接,
主流的MQT是基于TCP連接進行資料推送的,但是同樣有基于UDP的版本,叫做MQTT-SN,
這兩種版本由于基于不同的連接方式,優缺點自然也就各有不同了,
(5)訊息服務質量(Q0S)支持,可靠傳輸保證;有三種訊息發布服務質量:
QoS0:“至多一次",訊息發布完全依賴底層TCP/IP網路,會發生訊息丟失或重復,這一級別可用
如下情況,環境傳感器資料,丟失一次讀記錄無所謂,因為不久后還會有第二次發送,這一種方式主要普通APP的推送,倘若你的智能設備在訊息推送時未聯網,推送過去沒收到,再次聯網也就收不了,
QoS1:“至少一次",確保訊息到達,但訊息重復可能會發生, 在支付情況在不可取
QoS2:“只有一次",確保訊息到達一次,在一些要求比較嚴格的計費系統中,可以使用此級別,在計費系統中,訊息重復或丟失會導致不正確的結果,這種最高質量的訊息發布服務還可以用于即時通訊類的APP的推送,確保用戶收到且只會收到一次,
(6)1位元組固定報頭,2位元組心跳報文,最小化傳輸開銷和協議交換,有效減少網路流量,
這就是為什么在介紹里說它非常適合"在物聯網領域,傳感器與服務器的通信,資訊的收集,要知道嵌入式設備的運算能力和帶寬都相對薄弱,使用這種協議來傳遞訊息再適合不過了,
(7)在線狀態感知:使用Last Will和Testament特性通知有關各方客戶端例外中斷的機制,
服務端和客戶端有心跳感知 服務端實實檢測客戶端或者設備的狀態
Last Wi:即遺言機制,用于通知同一主題下的其他設備,發送遺言的設備已經斷開了連接,
當客戶端下線 服務端幫客戶端執行某一件事情
Testament:遺囑機制,功能類似于Last Will.
5.MQTT協議實作方式
實作MQTT協議需要客戶端和服務器端通訊完成,在通訊程序中,MQTT協議中有三種身份:
發布者(Publish)、代理(Broker)(服務器),訂閱者(Subscribe),其中,訊息的發布者和訂閱者都是客戶端訊息代理是服務器,訊息發布者可以同時是訂閱者,
MQTT傳輸的訊息分為:主題(Topic)和負載(payload)兩部分:
(1) Topic,可以理解為訊息的型別,訂閱者訂閱(Subscribe)后,就會收到該主題的訊息內容(payload);
(2) payload,可以理解為訊息的內容,是指訂閱者具體要使用的內容
6.MQTT客戶端
一個使用MQTT協議的應用程式或者設備,它總是建立到服務器的網路連接,客戶端可以:
(1)發布其他客戶端可能會訂閱的資訊;
(2)訂閱其它客戶端發布的訊息;
(3)退訂或洗掉應用程式的訊息;
(4)斷開與服務器連接
7.MQTT服務器端
MQTT服務器以稱為"訊息代理”(Broker),可以是一個應用程式或一臺設備,它是位于訊息發布者和訂閱者之間,它可以:
(1)接受來自客戶的網路連接;
(2)接受客戶發布的應用資訊;
(3)處理來自客戶端的訂閱和退訂請求;
(4)向訂閱的客戶轉發應用程式訊息,
8. 發布/訂閱、主題、會話
MQTT 是基于 發布(Publish)/訂閱(Subscribe) 模式來進行通信及資料交換的,與 HTTP 的 請求(Request)/應 答(Response) 的模式有本質的不同,
訂閱者(Subscriber) 會向 訊息服務器(Broker) 訂閱一個 主題(Topic) ,成功訂閱后,訊息服務器會將該主題下的訊息轉發給所有的訂閱者,
主題(Topic)以 ‘/’ 為分隔符區分不同的層級,包含通配符 ‘+’ 或 ‘#’ 的主題又稱為 主題過濾器(Topic Filters); 不含通配符的稱為 主題名(Topic Names) 例如:
chat/room/1
sensor/10/temperature
sensor/+/temperature
$SYS/broker/metrics/packets/received
$SYS/broker/metrics/#
‘+’: 表示通配一個層級,例如a/+,匹配a/x, a/y
‘#’: 表示通配多個層級,例如a/#,匹配a/x, a/b/c/d
注: ‘+’ 通配一個層級,’#’ 通配多個層級(必須在末尾),
發布者(Publisher) 只能向 ‘主題名’ 發布訊息,訂閱者(Subscriber) 則可以通過訂閱 ‘主題過濾器’ 來通配多個主題名稱,
會話(Session)
每個客戶端與服務器建立連接后就是一個會話,客戶端和服務器之間有狀態互動,會話存在于一個網路之間,也可能在客戶端和服務器之間跨越多個連續的網路連接,
9. MQTT協議中的方法
MQTT協議中定義了一些方法(也被稱為動作),來于表示對確定資源所進行操作,這個資源可以代表預先存在的資料或動態生成資料,這取決于服務器的實作,通常來說,資源指服務器上的檔案或輸出,主要方法有:
(1)CONNECT:客戶端連接到服務器
(2)CONNACK:連接確認
(3)PUBLISH:發布訊息
(4)PUBACK:發布確認
(5)PUBREC:發布的訊息已接收
(6)PUBREL:發布的訊息已釋放
(7)PUBCOMP:發布完成
(8)SUBSCRIBE:訂閱請求
(9)SUBACK:訂閱確認
(10)UNSUBSCRIBE:取消訂閱
(11)UNSUBACK:取消訂閱確認
(12)PINGREQ:客戶端發送心跳
(13)PINGRESP:服務端心跳回應
(14)DISCONNECT:斷開連接
(15)AUTH:認證
10.MQTT協議資料包結構
官方檔案中對于MQTT協議包的結構有著具體的說明:http://mqtt.org/documentation
二、EMQX簡介
MQTT屬于是物聯網的通信協議,在MQTT協議中有兩大角色:客戶端(發布者/訂閱者),服務端(Mqtt
broker);針對客戶端和服務端需要有遵循該協議的的具體實作,EMQ/EMQ X就是MQTT Broker的一種實作,
EMQ官網:https://www.emqx.io/cn/
EMQ X 是開源百萬級分布式 MQTT 訊息服務器(MQTT Messaging Broker),用于支持各種接入標準 MQTT協議的設備, 實作從設備端到服務器端的訊息傳遞,以及從服務器端到設備端的設備控制訊息轉發,從而實作物聯網設備的資料采集,和對設備的操作和控制,
1. EMQ X服務端環境搭建與配置
1.1安裝
EMQ X 目前支持的作業系統:
Centos6
Centos7
OpenSUSE tumbleweed
Debian 8
Debian 9
Debian 10
Ubuntu 14.04
Ubuntu 16.04
Ubuntu 18.04
macOS 10.13
macOS 10.14
macOS 10.15
產品部署建議 Linux 服務器,不推薦 Windows 服務器,
安裝包下載鏈接:https://www.emqx.io/cn/downloads#broker
更多安裝教程:https://docs.emqx.cn/broker/v4.3/getting-started/install.html
Shell 腳本一鍵安裝 (Linux)
curl https://repos.emqx.io/install_emqx.sh | bash
- 獲取 Docker 鏡像
docker pull emqx/emqx:4.3.7
- 啟動 Docker 容器
docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:4.3.7
1.2啟動
當 EMQ X 成功運行在你的本地計算機上且 EMQ X Dashboard 被默認啟用時,通過訪問
http://localhost:18083 來查看Dashboard,默認用戶名是 admin ,密碼是 public ,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293256.html
標籤:其他
