Linux编程MQTT实现主题发布订阅
【物聯網阿里云平臺開發項目實戰|附課件資料】智能硬件開發-數據上云,零基礎入門
4G模塊連接阿里云教程
MQTT通信協議(mosquitto)在Linux上的環境構建與測試
MQTT通信協議(mosquitto)發布訂閱例子C語言實現
MQTT客戶端軟件(MQTT.fx)的使用詳解
各類MQTT代理服務器特性對比
Web技術(七):如何使用并實現MQTT 消息訂閱-發布模型? 本機抓包等
目錄
- 物聯網從云到端實戰開發
- 實現功能技術介紹
- 基礎宏觀設計框架搭建
- 基礎環境搭建
物聯網從云到端實戰開發
參考:【物聯網云端項目實戰】物聯網從云到端實戰開發(附課程資料&項目源碼)
地址:https://www.bilibili.com/video/BV1hf4y1b731?p=10&spm_id_from=pageDriver
實現功能技術介紹
? 物聯網通信技術流程圖
? 上圖中的物聯網通信環境包括以太網、Wi-Fi、RFID、NFC、ZigBee、6LoWPAN,藍牙、GSM、GPRS、3G、4G等。
? 每種通信的應用協議都有到一定的適用范圍,AMQP、JMS、REST/HTTP都是工作在以太網,COAP協議是專門為資源受限設備開發的協議,而DDS和MQTT兼容性是最強的,下面逐一介紹各類通信協議的特點。
REST/HTTP
適用范圍:
- REST/HTTP主要為了簡化互聯網中的系統架構,快速實現客戶端和服務器之間交互的松耦合,降低了客戶端和服務器之間的交互延遲。因此適合在物聯網的應用層面,通過REST開放物聯網中資源,實現服務被其他應用所調用。
特點:
-
REST 指的是一組架構約束條件和原則。
-
客戶端和服務器之間的交互在請求之間是無狀態的。
-
在服務器端,應用程序狀態和功能可以分為各種資源,它向客戶端公開,每個資源都使用 URI 得到一個唯一的地址。所有資源都共享統一的界面,以便在客戶端和服務器之間傳輸狀態。
-
使用的是標準的 HTTP 方法,比如:GET、PUT、POST 和 DELETE。
-
REST/HTTP其實是互聯網中服務調用API封裝風格,物聯網中數據采集到物聯網應用系統中,在物聯網應用系統中,可以通過開放REST API的方式,把數據服務開放出去,被互聯網中其他應用所調用。
CoAP(Constrained Application Protocol)
適用范圍:
? CoAP是簡化了HTTP協議的RESTful API,CoAP是6LowPAN協議棧中的應用層協議,它適用于在資源受限的通信的IP網絡。
特點:
-
報頭壓縮:CoAP包含一個緊湊的二進制報頭和擴展報頭。它只有短短的4Bit的基本報頭,基本報頭后面跟擴展選項。一個典型的請求報頭為10~20Bit。
-
方法和URIs:為了實現客戶端訪問服務器上的資源,CoAP支持GET、PUT、POST和DELETE等方法。CoAP還支持URIs,這是Web架構的主要特點。
-
傳輸層使用UDP協議:CoAP協議是建立在UDP協議之上,以減少開銷和支持組播功能。它也支持一個簡單的停止和等待的可靠性傳輸機制。
-
支持資源發現:為了自主的發現和使用資源,它支持內置的資源發現格式,用于發現設備上的資源列表,或者用于設備向服務目錄公告自己的資源。它支持RFC5785中的格式,在CoRE中用/.well—known/core的路徑表示資源描述。
-
支持緩存:CoAP協議支持資源描述的緩存以優化其性能。
CoAP和6LowPan,這分別是應用層協議和網絡適配層協議,其目標是解決設備直接連接到IP網絡,也就是IP技術應用到設備之間、互聯網與設備之間的通信需求。因為IPV6技術帶來巨大尋址空間,不光解決了未來巨量設備和資源的標識問題,互聯網上應用可以直接訪問支持IPV6的設備,而不需要額外的網關。
MQTT (Message Queuing Telemetry Transport )
適用范圍:
? 在低帶寬、不可靠的網絡下提供基于云平臺的遠程設備的數據傳輸和監控。
? MQTT協議一般適用于設備數據采集到端(Device-》Server,Device-》Gateway),集中星型網絡架構(hub-and-spoke),不適用設備與設備之間通信,設備控制能力弱,另外實時性較差,一般都在秒級。
特點:
- 使用基于代理的發布/訂閱消息模式,提供一對多的消息發布
- 使用 TCP/IP 提供網絡連接
- 小型傳輸,開銷很小(固定長度的頭部是 2 字節),協議交換最小化,以降低網絡流量
- 支持QoS,有三種消息發布服務質量:“至多一次”, “至少一次”, “只有一次”
DDS協議(Data Distribution Service for Real-Time Systems)
適用范圍:
分布式高可靠性、實時傳輸設備數據通信。目前DDS已經廣泛應用于國防、民航、工業控制等領域。
特點:
-
以數據為中心
-
使用無代理的發布/訂閱消息模式,點對點、點對多、多對多
-
提供多大21種QoS服務質量策略
協議主要實現:
- OpenDDS 是一個開源的 C++ 實現
- OpenSplice DDS
DDS很好地支持設備之間的數據分發和設備控制,設備和云端的數據傳輸,同時DDS的數據分發的實時效率非常高,能做到秒級內同時分發百萬條消息到眾多設備。DDS在服務質量(QoS)上提供非常多的保障途徑,這也是它適用于國防軍事、工業控制這些高可靠性、可安全性應用領域的原因。但這些應用都工作在有線網絡下,在無線網絡,特別是資源受限的情況下,沒有見到過實施案例。
AMQP協議(互操作性)
AMQP(Advanced Message Queuing Protocol),先進消息隊列協議,用于業務系統例如PLM,ERP,MES等進行數據交換。
適用范圍:
最早應用于金融系統之間的交易消息傳遞,在物聯網應用中,主要適用于移動手持設備與后臺數據中心的通信和分析。
特點:
-
Wire級的協議,它描述了在網絡上傳輸的數據的格式,以字節為流
-
面向消息、隊列、路由(包括點對點和發布/訂閱)、可靠性、安全
協議實現:
· Erlang中的實現有 RabbitMQ
· AMQP的開源實現,用C語言編寫OpenAMQ
· Apache Qpid
· stormMQ
XMPP協議(即時通信)
? XMPP(Extensible Messaging and Presence Protocol)可擴展通訊和表示協議,一個開源形式組織產生的網絡即時通信協議。
適用范圍:
即時通信的應用程序,還能用在網絡管理、游戲、遠端系統監控等。
特點:
-
客戶機/服務器通信模式
-
分布式網絡
-
簡單的客戶端,將大多數工作放在服務器端進行
-
標準通用標記語言的子集XML的數據格式
XMPP是基于XML的協議,由于其開放性和易用性,在互聯網及時通訊應用中運用廣泛。相對HTTP,XMPP在通訊的業務流程上是更適合物聯網系統的,開發者不用花太多心思去解決設備通訊時的業務通訊流程,相對開發成本會更低。但是HTTP協議中的安全性以及計算資源消耗的硬傷并沒有得到本質的解決。
JMS
JMS (Java Message Service),即消息服務,這是JAVA平臺中著名的消息隊列協議。
Java消息服務應用程序接口,是一個Java平臺中關于面向消息中間件(MOM)的API,用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。Java消息服務是一個與具體平臺無關的API,絕大多數MOM提供商都對JMS提供支持。
JMS是一種與廠商無關的 API,用來訪問消息收發系統消息,它類似于JDBC(Java Database Connectivity)。這里,JDBC 是可以用來訪問許多不同關系數據庫的 API,而 JMS 則提供同樣與廠商無關的訪問方法,以訪問消息收發服務。許多廠商都支持 JMS,包括 IBM 的 MQSeries、BEA的 Weblogic JMS service和 Progress 的 SonicMQ。 JMS 能夠通過消息收發服務(有時稱為消息中介程序或路由器)從一個 JMS 客戶機向另一個 JMS客戶機發送消息。消息是 JMS 中的一種類型對象,由兩部分組成:報頭和消息主體。報頭由路由信息以及有關該消息的元數據組成。消息主體則攜帶著應用程序的數據或有效負載。根據有效負載的類型來劃分,可以將消息分為幾種類型,它們分別攜帶:簡單文本(TextMessage)、可序列化的對象 (ObjectMessage)、屬性集合 (MapMessage)、字節流 (BytesMessage)、原始值流 (StreamMessage),還有無有效負載的消息 (Message)。
基礎宏觀設計框架搭建
? 從宏觀到圍觀,掌握全局設計及技術篩選和代碼實現,同時體驗面向對象的思維理念,先整體后局部,物聯網通信技術多數采用MQTT的通信方式,同時MQTT服務器又提供了多種的服務插件,在整體交互過程中,MQTT通信協議將被作為中心點進行延申對接其他服務,如數據庫,WEB。。。。
1、整體簡易框架示意圖:
2、終端框架示意圖
3、MQTT服務框架
4、數據庫框架示意圖
5、WEB框架示意圖
基礎環境搭建
開發主機:win10_64位操作系統、16G內存、CPU 4Ghz x 8
開發環境:Vmware16、Ubuntu20.04
開發工具:VsCode、Pycharm、git
鏡像下載:http://releases.ubuntu.com/20.04/
總結
以上是生活随笔為你收集整理的Linux编程MQTT实现主题发布订阅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法图解——の——二分查找【附带pdf下
- 下一篇: Linux串口应用编程