MQTT,物聯網圈的 HTTP,萬物互聯第一步
作者:付強
物聯網曾被認為是繼計算機、網際網路之後,資訊科技行業的第三次浪潮。隨著基礎通訊設施的不斷完善,尤其是 5G 的出現,進一步降低了萬物互聯的門檻和成本。物聯網本身也是 AI 和區塊鏈應用很好的落地場景之一,各大雲服務商也在紛紛上架物聯網平臺和服務。在 AI 和區塊鏈的熱潮過去之後,物聯網很有可能成為下一個風口,在風口到來之前,提前進行一些知識儲備,是很有必要的。
縱觀人工智慧的發展路線我們可以看到,人工智慧近年來之所以能夠突飛猛進,第一個原因是硬體的發展,使得深度學習神經網路的學習時間迅速縮短;第二就是資料,在我們這個大資料的時代,獲取大量資料的成本已經很低了。
再來說物聯網,像感測器、智慧家電、可穿戴裝置等,每天也都在產生著巨量的資料,這也是反饋給深度學習良好的訓練資料。同時,學習的結果又可以再應用到物聯網的終端,形成一個良性的迴圈。舉個例子:
從交通探頭我們可以採集到大量的交通實時圖片,經過處理之後,餵給神經網路,比如 SSD。SSD 學會在圖片中標註出人和汽車的位置,然後再把模型部署到探頭端,探頭就可以利用深度學習的介面,來實時地分析人流和車流情況了。
所以我認為物聯網是 AI 落地的一個非常好的應用場景,隨著 AI 的迅速發展,物聯網這個同樣在很多年前就提出的理論和技術,也會迎來新的春天。
如果想入門物聯網,學習和了解 MQTT 協議是非常必要的,它解決了物聯網中的一個最基礎的問題,裝置和裝置之間,裝置和雲端服務之間,是怎麼通訊的。MQTT 之於物聯網,就好像 HTTP 之於 Web 那麼重要。目前基本所有開放雲平臺比如阿里雲、騰訊雲、青雲等都支援 MQTT 的接入。
MQTT 是什麼
MQTT,全稱為 Message Queue Telemetry Transport。在 1999 年,由 IBM 的 Andy Stanford-Clark 和 Arcom 的 Arlen Nipper 為了一個通過衛星網路連線輸油管道的專案開發的。
之後 IBM 一直將 MQTT 作為一個內部協議在其產品中使用,直到 2010 年,IBM 公開發布了 MQTT 3.1 版本。在 2014 年,MQTT 協議正式成為了 OASIS(結構化資訊標準促進組織)的標準協議。隨著多年的發展,MQTT 協議的重點也不再只是嵌入式系統,而是更廣泛的物聯網(Internet of Things)世界了。
MQTT 的優點
為了滿足低電量消耗和低網路頻寬的需求,MQTT 協議在設計之初就包含了以下一些特點:
- 實現簡單
- 提供資料傳輸的 QoS
- 輕量、佔用頻寬低
- 可傳輸任意型別的資料
- 可保持的會話(session)
MQTT 協議可以為大量的低功率、工作網路環境不可靠的物聯網裝置提供通訊保障。而它的應用範圍也不僅如此,在移動網際網路領域也大有作為:很多 Android App 的推送功能,都是基於 MQTT 實現的,也有一些 IM 的實現,是基於 MQTT 的。
MQTT 為什麼如此輕量且靈活?
MQTT 釋出和訂閱模型
簡單來說是因為 MQTT 協議有以下特性:
- 基於 TCP 協議的應用層協議;
- 採用 C/S 架構;
- 使用訂閱/釋出模式,將訊息的傳送方和接受方解耦;
- 提供 3 種訊息的 QoS(Quality of Service): 至多一次,最少一次,只有一次;
- 收發訊息都是非同步的,傳送方不需要等待接收方應答。
雖然 MQTT 協議名稱有 Message Queue 兩個詞,但是它並不是一個像 RabbitMQ 那樣的一個訊息佇列,這是初學者最容易搞混的一個問題。MQTT 跟傳統的訊息佇列相比,有以下一些區別:
- 在傳統訊息佇列中,在傳送訊息之前,必須先建立相應的佇列;在 MQTT 中,不需要預先建立要釋出的主題(可訂閱的 Topic);
- 在傳統訊息佇列中,未被消費的訊息總是會被儲存在某個佇列中,直到有一個消費者將其消費;在 MQTT 中,如果釋出一個沒有被任何客戶端訂閱的訊息,這個訊息將被直接扔掉;
- 在傳統訊息佇列中,一個訊息只能被一個客戶端獲取,在 MQTT 中,一個訊息可以被多個訂閱者獲取,MQTT 協議也不支援指定訊息被單一的客戶端獲取。
一個物聯網老兵的經驗之談
我從 2015 年開始帶領團隊在物聯網領域創業,從物聯網軟硬體平臺的架構到實現,從上線運營到盈利,中間走過一些彎路,也踩過一些坑。同時,我在社群、論壇、QQ 群裡面也經常看見一些剛剛接觸 MQTT 的同學在問各種問題。我曾經在網路上面也搜尋過 MQTT 相關的內容,發現系統介紹 MQTT 協議的內容很少,要麼是翻譯協議的 Specification,要麼是單獨實現某一個功能的教程。只教其然,未教其所以然。
所以我總結了自己的實踐經驗,以及我看到的大家常遇到的問題,寫了這一門課程,系統地介紹 MQTT 協議,希望對學習 MQTT 的同學有所幫助。
課程大綱
本課程共有三部分內容,總計 14 課:
- 第一部分:講解 MQTT 協議以及其特性,並輔以程式碼。
- 第二部分:講解一個 AI+IoT 實戰專案。
- 第三部分:講解如何搭建 MQTT Broker 和安全實踐,同時也會介紹 MQTT 5.0 版本的新特性。
掃描下方二維碼或點此試讀訂閱
其他推薦
本課程地址:https://gitbook.cn/gitchat/column/5be4f4df2c33167c317beb8c