MQTT 是 IBM 於 1998 年設計和開發的工做在 TCP/IP 協議簇上是基於 TCP 協議的應用層協議。MQTT 採用輕量級的發佈/訂閱範式進行消息傳輸,旨在爲低帶寬和不穩定的網絡環境中的物聯網設備提供可靠的網絡服務,設備須要連結在消息中間件 (MQTT Broker)上進行消息通訊。git
衆多物聯網協議中,MQTT 以其開放、輕量、節能、通用等特色,被愈來愈多的企業所接受,已經成爲物聯網通訊協議的事實標準。但因爲所在行業特殊性或其餘種種緣由,在物聯網行業中有大量一樣基於 TCP/IP 的通訊協議:有造成規模的標準的行業協議如電力、道路交通、工控協議,也有公司、項目甚至是我的開發的私有協議。不管新舊項目都有可能遇到沒法使用 MQTT 協議的困境。github
TCP 協議通訊涉及網絡編程,客戶端與服務端軟件都須要應對和處理複雜的網絡環境、業務邏輯和組件架構問題,實際開發中每一個組件都須要在均衡性能和穩定性的同時兼顧安全性易用性,爲開發帶來了很大難度。編程
加之私有 TCP 協議因爲較爲小衆或者具有較強的行業專注性致使用戶較少,每每缺少一個優秀的客戶端和服務端軟件,隨着業務的發展設備數量增多通訊流量超出預期和功能需求增改,整個業務中潛在的問題將會被放大:安全
EMQ X 做爲一款優秀的開源 MQTT Broker,在支持高性能、大規模標準 MQTT 協議百萬設備接入、支持集羣水平拓展的基礎上,拓展了私有 TCP 協議接入並集成大量開箱即用的功能:多種方式的認證鑑權、發佈訂閱 ACL 控制,規則引擎消息處理、消息存儲與橋接,完備的監控運維繫統、外部 REST API 控制調用等。bash
在高性能、高拓展性的基礎上,EMQ X 打通了上層應用程序對設備鏈接/通訊整個生命週期控制和數據交互通道,使得用戶能夠快速完成物聯網應用開發。服務器
目前 EMQ X 經過服務端適配/設備側適配的方式,提供完整的私有 TCP 接入方案:網絡
EMQ X TCP 私有協議接入的鏈接在應用層抹平了與 MQTT 鏈接的差別,以 emqx-tcp 插件爲例,部分配置項以下:架構
## 上行主題。上行消息到 EMQ 系統中的消息主題 ## ## 佔位符: ## - %c: 接入客戶端的 ClientId ## - %u: 接入客戶端的 Username tcp.proto.up_topic = tcp/%c/up ## 下行主題。客戶端接入成功後, emqx-tcp 會訂閱 ## 該主題,以接收 EMQ 系統向該類型的客戶端下 ## 發的消息。 ## ## 佔位符:(同上) tcp.proto.dn_topic = tcp/%c/dn
從配置項中咱們能夠看出私有 TCP 協議接入的通訊模式:併發
tcp/%c/up
主題,EMQ X 中其餘客戶端包括應用程序訂閱該主題便可接收到私有 TCP 協議設備信息;tcp/%c/dn
發佈消息便可送達該客戶端。由此咱們與創建了私有 TCP 協議客戶端創建了雙向通訊,同時客戶端接入前可使用 EMQ X 內置的認證鑑權組件進行認證,消息抵達的時候亦可以使用發佈訂閱 ACL 組件進行訪問控制。整個環節中,規則引擎、消息橋接、持久化組件配置相關規則後也能夠處理該部分數據。框架
EMQ 爲客戶提供的私有化付費開發定製服務中包括私有 TCP 協議接入適配項目。
服務端適配針對既有私有 TCP 協議,在不改動舊網設備的狀況下調整服務器功能,適配後設備能夠無縫遷移鏈接到 EMQ X。EMQ X 系統分層中鏈接層負責處理服務端 Socket 鏈接與 MQTT 協議編解碼,其功能以下:
圖 1 EMQ X 功能架構圖 圖中紅框部分即爲私有 TCP/UDP 協議層
在當下架構設計中,要適配特定的私有 TCP 協議,僅需在鏈接層拓展相應的協議編解碼和報文處理功能。用戶以插件的形式擴展 EMQ X 協議適配器後,便可讓私有協議 TCP 設備無需通過網關/代理服務器直接接入 EMQ X,讓項目開發使用充分享受 EMQ X 帶來的便利。
設備側適配針對新設備,根據 EMQ 提供的 EMQ 私有 TCP 協議規範 和接入 SDK 在設備側開發調整,適配後設備能夠無縫遷移鏈接至 EMQ X。
通過多個成熟項目的私有 TCP 協議開發定製經驗上,EMQ 推出一個通用的、基於 TCP 私有協議的接入規範 EMQ 私有 TCP 協議規範,相較於 MQTT 協議更加輕量,爲私有 TCP 接入提供了完整的解決方案。
EMQ X TCP 包含一個私有 TCP 協議標準和對應的接入插件 emqx-tcp,整個規範設計原則以下:
規範中的 emqx-tcp 做爲一個靠近端側的一個接入模塊,按照其功能邏輯和整個系統的關係,將整個消息交換的過程能夠分紅三個部分:終端側,平臺側和其它側:
|<-- Terminal -->|<--------- Broker Side --------->|<--- Others --->| |<- Side ->| |<-- Side -->| +---+ PUB +-----------+ | D | INCOMING +----------+ PUB +---------+ -->| subscriber| | E |----------->| |----------->| |--/ +-----------+ | V | | emqx-tcp | | EMQ X | | I |<-----------| |<-----------| |<-- +-----------+ | C | OUTGOING +----------+ PUB +---------+ \--| publisher | | E | PUB +-----------+ +---+
目前 EMQ X TCP 協議規範及 emqx-tcp 插件是隨 EMQ X Enterprise 分發的,EMQ X 企業版用戶能夠自由使用該部分功能,依據 EMQ 私有 TCP 協議規範 進行設備側的驅動、通訊開發,從設備側適配私有 TCP 協議接入。
但實際物聯網項目中設備側的協議多種多樣,舊項目或行業相關的項目使用有其餘私有 TCP 協議規範的時候 emqx-tcp 插件並不能直接適用,此時就須要從服務端來進行適配。
EMQ X TCP 協議規範 及 emqx-tcp 插件更多價值是創建在諸多項目經驗上,爲企業私有 TCP 協議定製提供一個成熟方案。
EMQ 對私有 TCP 協議接入適配的僅在 EMQ X 企業版支持,適配後交付 EMQ X Enterprise 與對應的功能插件,開源用戶如具有 Erlang 開發經驗亦可自行開發實現。
歡迎各位用戶下載試用 EMQ X Enterprise,在私有 TCP 協議接入定製包括其餘私有化定製方面有任何需求能夠同 EMQ 聯繫:
更多信息請訪問咱們的官網 emqx.io,或關注咱們的開源項目 github.com/emqx/emqx ,詳細文檔請訪問 官方文檔。