**MQTT** ===  ## MQTT 協定 * (中文版) http://mcxiaoke.github.io/mqtt/protocol/MQTT-3.1.1-CN.html#pf2d * (英文版) http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.pdf ## Mqtt 教學 * 付費的 MQTT 服務廠商的文件 (寫最完整) [MQTT 教學](https://www.hivemq.com/blog/mqtt-essentials/) 1. [Part 2 中文版](https://coyee.com/article/11999-mqtt-essentials-part-2-publish-subscribe) 1. [Part 3 中文版](https://coyee.com/article/12000-mqtt-essentials-part-3-client-broker-and-connection-establishment) 2. [Part 4 中文版](https://coyee.com/article/12008-mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe) 3. [Part 5 中文版](https://coyee.com/article/12006-mqtt-essentials-part-5-mqtt-topics-best-practices) 4. [MQTT Essentials Special 中文版](https://coyee.com/article/12006-mqtt-essentials-part-5-mqtt-topics-best-practices) [MQTT 安全](https://www.hivemq.com/blog/mqtt-security-fundamentals/) * 簡中,寫得很完整 [MQTT教學](http://www.iteye.com/blogs/subjects/mqtt ) * 寫得不錯,而且又是中文 (基礎介紹) [MQTT教學(一)](https://swf.com.tw/?p=1002) [MQTT教學(二)](https://swf.com.tw/?p=1009) ## MQTT 版本 (MQTT 5 還未更新)  ## MQTT 與 HTTP 訊息內容比較  * HTTP 訊息內容 * MQTT 訊息內容  ## 運作流程  ## Topic (主題) * Topic (主題) 結構範例  * Topic (主題)命名規則 :::info 1.階層名稱可以空白,像這樣的命名 home//yard,代表有三個階層,中間階層沒有名字 2.長度不可超過216位元組(65536個字元)  範例 : 人體感測器1 的 Topic (主題) 命名為  ::: :::danger 非法命名 1.勿用$開頭,Server 通常會使用 $ 開頭主題為統計訊息 2.不可包含#和+字元 ::: ## 訂閱 * Topic (主題)結構範例  * 訂閱 Topic (主題) 規則 ::: info 1.+字元:匹配單一階層的主題名稱 2.#字元:匹配多層主題名稱,這個字元只放在名稱最後。  ::: :::danger 非法訂閱  ::: ## Qos (傳輸品質) ### Qos 0 **只發送一次 (不保證送達)**  ### Qos 1 **保證送達至少一次,所以有可能發送 2 次**  ### Qos 2 **保證送達一次**  ## 程式運作流程 ### 連線 Server 參數 * **ClientID** 客戶端 ID ::: danger 同時只能存一個在 Server 上。 如果用同個 ClientID 連線 Server,Server 會將使用同個 ClientID 的客戶端斷線。 ::: * **UserName** 用於認證的使用者名稱 (Server 需起用認證) * **Password** 用於認證的密碼 (Server 需起用認證) * **CleanSession** 是否清除 Session ::: info Session 包含 1. ClientID 訂閱的 Topic (主題) 2. ClientID 未接收的訊息 ::: :::warning 設定為 True 1. 會清除舊有 Session,重新建立新的 Session 2. 斷線時會清除 Session ::: * **KeepAlivePeriod** Server 在設定的時間內未收到客戶端的訊息時,會將客戶端斷線。 單位 : 秒 ::: info Server 通常會在乘上一個倍數。 EMQ為 【設定的值】* 【0.75 (config 設定)】*【2】 ::: * **WillFlag** 是否起用當斷線時,Server 會發佈 Will (遺囑) 訊息 ::: danger 設定為 False 1. WillRetain、WillQos 必須設定為 0 2. WillTopic、WillMessage 不能有值 ::: * **WillRetain** Will (遺囑) 訊息是否設定為 Retain (保留) 訊息 :::info Retain (保留) 訊息 1. 一個主題只會存在一個 Retain (保留) 訊息 2. 新訂閱的 ClientID 才會收到 Retain (保留) 訊息 ::: * **WillQos** Will (遺囑) 訊息的 Qos * **WillTopic** Will (遺囑) 訊息的 Topic (主題) * **WillPayload** Will (遺囑) 訊息的內容 ### 訂閱參數 * Topics 可同時訂閱多個 Topic (主題) * Qos 設定每個訂閱 Topic (主題) 的 Qos :::warning Server 會依照【訂閱 Qos】和【發佈訊息 Qos】最低的 Qos 做發送訊息 ::: ### 發佈參數 * Topic 發佈訊息到哪個 Topic (主題) * Payload 訊息內容 * Qos 發佈訊息的 Qos * Retain (保留) 訊息 :::info Retain (保留) 訊息 1. 一個主題只會存在一個 Retain (保留) 訊息 2. 新訂閱的 ClientID 才會收到 Retain (保留) 訊息 ::: MQTT Server 比較 === * 網友提供的檔案 (2018 更新) <i class="fa fa-folder"></i> X:\\!Yumin\Demo 程式\Mqtt (使用 EMQ)\Feature.comparison.of.different.MQTT.brokers.pdf * 好像停止更新了,但是還是可以參考 https://github.com/mqtt/mqtt.github.io/wiki/server-support#capabilities .NET 開發 === * **Nuget** 1. Plt.M2Mqtt 2. M2MqttDotnetCore (NET Standard 2.0) :::danger 原版 M2Mqtt 作者已不更新 , 轉移到上面兩個繼續維護 ::: .NET Demo 專案 === <i class="fa fa-folder"></i> X:\\!Yumin\Demo 程式\Mqtt (使用 EMQ) Tag === ###### tags: `Queue`,`MQTT`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up