香蕉视频久久-香蕉视频三级-香蕉视频亚洲一级-香蕉视频一级-青草国产在线-青草国产在线观看

網關內部程序應該如何設計?

2021-03-17 16:00:12 星創易聯 111

  物聯網系統中的網關內部程序應該如何設計?物聯網系統中,設備之間是如何通信的;網關中的進程之間消息總線通信模型;網關內部消息總線上的數據如何與服務器進行通信;作為消遣,了解一下物聯網系統中的一些基本知識。

  物聯網這個詞語的范疇太廣,似乎所有的硬件設備,只要能夠接入網絡,就可以稱之為物聯網產品,似乎物聯網這個詞可以把一切都納入到其中。

在設計一個應用程序的架構時,可以通過多線程來實現,也可以通過多進程來實現,每個人的習慣都不一樣,各有各的好處。我們這里不去討論孰優孰劣,因為我對多進程這樣的設計思想比較偏愛,所以就直接按照多進程的程序架構來討論。

3.1 網關中需要哪些進程

網關中需要執行的所有進程,是根據網關的功能來決定的,假設包括如下的功能:

(1)連接外網的進程 Proc_Bridge

網關需要連接到云端的服務器,需要一個進程與服務器之間保持長連接,這樣就可以及時接收到服務器發來的控制指令,以及把系統內部數據及時上報給服務器。

這個進程需要把從服務器接收到的指令轉發到網關系統內部,把從系統內部接收到的信息轉發給服務器,類似于橋接的功能,因此命名為 Proc_Bridge。

(2)設備管理進程 Proc_DevMgr

這個進程用來執行設備管理功能,設備的添加(入網)、刪除(退網),都由此進程來管理。

(3)協議轉換進程 Proc_Protocol

下行:把應用層的統一通信協議,轉換成不同類型無線通信協議,發送給相應的無線模塊。

上行:把設備上報的、不同類型的無線通信協議,轉換成應用層的統一通信協議。

(4)邊沿計算進程(自動化控制) Proc_Auto

很明顯,這需要一個獨立的進程來處理各種計算,這個進程就相當于系統的大腦。

(5)無線通信協議相關的進程 Proc_ZigBee, Proc_RF, Proc_ZWave

在硬件上,每一種無線通信模塊通過串口或其他硬件連接方式與到網關的 CPU 進行通信,因此,每一種無線通信模塊都需要一個相應的進程來處理。

(6)其他“軟設備”進程 Proc_Xxx

在之前的項目中,還遇到一些硬件設備,它們與門磁、插座等設備在邏輯上處于同一個層次,但是與網關之間是通過 TCP 來連接。對于這樣的設備,也可以使用一個獨立的進程來進行管理。

上面的這些進程,在網關中的運行模型如下:

5g/4g工業路由網關

3.2 MQTT消息總線

以上這些進程之間需要相互通信,不是簡單的點對點通信,而是一個網狀的通信模型。比如:

設備管理進程 Proc_DevMgr:當任何一種設備被添加到系統中時,都需要處進行處理,因此它需要與 Proc_ZigBee, Proc_RF, Proc_ZWave 這些進程進行通信;當某個設備上報數據時(例如:Proc_ZigBee),Proc_Protocol 進程需要把數據進行協議轉換,然后 Proc_Bridge 進程把轉換后的數據上報給服務器,同時 Proc_Auto 進程需要檢查這個設備上報的數據是否觸發了其他相關聯的設備;

也就是說,這些進程中間的通信是相互交叉的,如果通過傳統的 IPC 方式(共享內存、命名管道、消息隊列、Socket)等,處理起來比較復雜。

引入了 MQTT 消息總線之后,每個進程只需要掛載到總線上。每個進程只需要監聽自己感興趣的 topic,就可以接收到相應的數據。

5g/4g工業路由網關

既然這些進程之間的通信關系比較復雜,那么一個良好的 topic 設計規范就顯得很重要了!

3.3 Topic 的設計

MQTT 的通信模型是基于訂閱/發布的模式,一個客戶端(進程)接入到消息總線之后,需要注冊自己感興趣的 主題 topic,其他客戶端(進程)往這個 topic 發送消息,即可被訂閱者接收到。

主題 topic 是一個以反斜線(/)分割的字符串,用來表示多層的分級結構,例如下面的這 2 個 topic,是亞馬遜 AWS 平臺中在線升級(OTA)相關的 topic:

$aws/things/MyThing/jobs/get/accepted$aws/things/MyThing/jobs/get/rejected

在我們的示例場景中,可以按照下面這樣來設計主題 topic:

(1) Proc_DevMgr

訂閱主題:

$iot/v1/ZigBee/Register  $iot/v1/ZigBee/UnRegister  $iot/v1/RF/Register  $iot/v1/RF/UnRegister  $iot/v1/ZWave/Register  $iot/v1/ZWave/UnRegister

(2) Proc_Bridge

訂閱主題:

$iot/v1/Device/Report

發出數據的主題:

$iot/v1/Device/Control  $iot/v1/Device/Remove  $iot/v1/Auto/AddRule  $iot/v1/Auto/RemoveRule

(3) Proc_Protocol

訂閱主題:

$iot/v1/Device/Control  $iot/v1/Device/Remove  $iot/v1/ZigBee/Report  $iot/v1/RF/Report  $iot/v1/ZWave/Report  

發送數據主題:

$iot/v1/Device/Report  $iot/v1/ZigBee/Control  $iot/v1/ZigBee/Remove  $iot/v1/RF/Control  $iot/v1/RF/Remove  $iot/v1/ZWave/Control  $iot/v1/ZWave/Remove  

(4) Proc_Auto

訂閱主題:

$iot/v1/Auto/AddRule  $iot/v1/Auto/RemoveRule  $iot/v1/Device/Report  

發送數據主題:

$iot/v1/Device/Control

(5) Proc_ZigBee

訂閱主題:

$iot/v1/ZigBee/Control  $iot/v1/ZigBee/Remove  

發送數據主題:

$iot/v1/ZigBee/Register  $iot/v1/ZigBee/UnRegister  $iot/v1/ZigBee/Report  

(6) Proc_RF

訂閱主題:

$iot/v1/RF/Control  $iot/v1/RF/Remove

發送數據主題:

$iot/v1/RF/Register  $iot/v1/RF/UnRegister  $iot/v1/RF/Report  

(7) Proc_ZWave

訂閱主題:

$iot/v1/ZWave/Control  $iot/v1/ZWave/Remove  

發送數據主題:

$iot/v1/ZWave/Register  $iot/v1/ZWave/UnRegister  $iot/v1/ZWave/Report  

以上這些主題 topic 的設計,還是有些粗略的。如果借助通配符(#, +, $),可以設計出更靈活的層次結構。

多層通配符: “#”是用于匹配主題中任意層級的通配符,多層通配符表示它的父級和任意數量的子層級。單層通配符:“+”加號是只能用于單個主題層級匹配的通配符,在主題過濾器的任意層級都可以使用單層通配符,包括第一個和最后一個層級。通配符:“$”表示匹配一個字符,只要不是放在主題的最開頭,其它情況下都表示匹配一個字符。

我們以一個控制指令為例,來梳理一下數據是如何通過 topic 進行流動:

5g/4g工業路由網關

Proc_Bridge 進程從服務器接收到控制指令后,發送到消息總線上的 topic: $iot/v1/Device/Control。由于 Proc_Protocol 進程訂閱了這個 topic,所以立刻接收到指令。Proc_Protocol 分析指令內容,發現是一個 ZigBee 設備,于是進行協議轉換,發送一個 ZigBee 控制指令到消息總線上的 topic: $iot/v1/ZigBee/Control。由于 Proc_ZigBee 進程訂閱了這個 topic,因此它接收到這個控制指令。Proc_ZigBee 把控制指令轉換成 ZigBee 無線通信模塊要求的格式,通過硬件發送給設備燈泡。

我們再分析一下設備數據上報的場景:

5g/4g工業路由網關

先關注圖中紅色箭頭,忽略藍色箭頭:

門磁打開后,通過無線通信把信息上報給進程 Proc_CF。Proc_RF 進程接收到 RF433 通信模塊上報的數據,把“門磁打開”這個信息發送到消息總線上的 topic:$iot/v1/RF/Report。由于 Proc_Protocol 進程訂閱了這個 topic,因此接收到上報的門磁數據。Proc_Protocol 分析數據,把 RF433 協議的數據轉成統一的應用層協議的數據,發送到消息總線上的 topic:$iot/v1/Device/Report。由于 Proc_Bridge 進程訂閱了這個 topic,因此就接收到了這次上報的數據。Proc_Bridge 進程把數據上報給服務器。

再來看一下藍色箭頭流程:

在上面的第 4 步:Proc_Protocol 進程把 RF433 協議數據轉成應用層統一協議之后,把數據發送到消息總線上的 topic:$iot/v1/Device/Report 之后,Proc_Auto 進程同時進行如下操作:

由于 Proc_Auto 也訂閱了這個 topic,因此它也接收到了門磁上報的這個應用層協議的數據。Proc_Auto 查找自己的配置信息(假設用戶已經提前配置好了一條規則:當門磁打開的時候,就觸發聲光報警器),發現匹配到了“門磁->報警器”這條規則,于是發出一條控制報警器的指令,發送到消息總線上的 topic: $iot/v1/Device/Control。

后面的 7,8,9,10 這四個步驟就與上面的控制指令流程完全一樣了。

3.4 與 DBUS 總線的對比

從上面描述的 3 個數據流向的場景中,是不是感覺到使用 topic 為“數據管道”的這種通信方式,與 Linux 系統中的 DBUS 總線特別的相似?

DBUS 總線也是用于進程之間的通信,按照我個人的理解,DBUS中其實是把進程之間的兩種通信組織在一起了:

基于信號的數據傳輸;基于方法的 RPC 遠程調用;

DBUS 總線包含的概念更復雜一些,包括:路徑、對象、接口、方法等等,這些概念組織在一起共同定位到一個具體的服務提供者了。

相比較而言,我感覺 MQTT 這樣的方式更簡潔一些。

所謂的 RPC 遠程調用,就是調用位于遠程機器上的一個函數,主要解決兩個問題:

網絡連接;數據的序列化和反序列化;

后面我會專門寫一篇文章,利用 protobuf 框架來實現 RPC 調用。

四、網關與云平臺之間的通信

上面講解的設計過程,是網關內部的各功能模塊之間通信方式,這也是我們作為嵌入式開發者能充分發揮的部分。

網關與云平臺之間的通信方式一般都是客戶指定的,就那么幾種(阿里云、華為云、騰訊云、亞馬遜AWS平臺)。一般都要求網關與云平臺之間處于長連接的狀態,這樣云端的各種指令就可以隨時發送到網關。

當然了,這些云平臺都會提供相應的 SDK 開發包,一般使用的 MQTT 協議來連接云平臺更多一些。在一些文檔中,會把位于云端的 MQTT 服務器稱作 Broker,其實就是一個服務器。

5g/4g工業路由網關

進程 Proc_Bridge 的功能主要有 2 點:

與云平臺的數據傳輸通道;協議轉換:把云平臺相關的協議轉換成網關內部的協議,以及相反的轉換。

也就是說:Proc_Bridge 進程需要同時連接到云平臺的 MQTT Broker 和網關內部的 MQTT 消息總線。在下一篇文章中,我們來專門講解這部分的內容,并提供一個實現橋接功能的代碼模板。


網站首頁
解決方案
產品中心
在線咨詢
小荡货奶真大水真多紧视频| 无码高清一区二区三区| 天堂8А√中文在线官网| 午夜成人亚洲理论片在线观看| 亚洲国产AV无码专区亚洲AVL| 用嘴巴吃鸡的好处| 办公室撕开奶罩吮奶在线观看| 俄罗斯女人与马Z00Z视频| 国产欧美一区二区三区在线看| 精品熟女少妇AV免费久久| 免费A级毛片波多野结衣| 人妻少妇久久中文字幕| 无码G0G0大胆啪啪艺术| 亚洲中文字幕无码一区二区三区| 99热都是精品久久久久久| 国产成人精品一区二三区| 红杏亚洲影院一区二区三区| 美女扒开屁股让男人桶GIF动态| 日韩VA中文字幕无码电影| 亚洲AV无码专区在线电影天堂| 中文字幕日本最新乱码视频| 公交车被CAO得合不拢腿视频| 精品久久久久久久无码| 欧洲另类二三四区| 亚洲AⅤ无码一区二区三区| 中文字幕无线码中文字幕免费 | 海角国精产品三区二区三区| 美女把腿扒开让我添视频| 兽交ZOOSKOO| 野花香视频在线观看社区| 成人无码一区二区三区网站| 精品国产一区二区三区国产区| 欧美与黑人午夜性猛交久久久| 羞涩的丰满人妻40P| 97国产精华最好的产品亚洲| 国产狂喷水潮免费网站WWW| 美人电影在线观看| 无码人妻丰满熟妇精品区| 中文字幕亚洲综合久久综合| 国产精品麻豆VA在线播放| 美美哒中文日本免费6| 污污污污污污网站| 337P日本大胆欧洲色噜噜| 国产精品免费久久久久影院仙踪林 | 又色又爽的无遮挡免费网址| 国产成人免费ā片在线观看老同学| 久久亚洲日韩成人无码导航| 我的风流岳每2部集第| 1000部拍拍拍18勿入免费视| 国产午夜无码福利在线看网站| 欧美人与动牲交免费观看视频| 亚洲AV区无码字幕中文色| MM1313又粗又大受不了| 精品一区二区三区自拍图片区| 色婷婷在线精品国自产拍| 在出租屋里被强高H| 国产精品亚洲日韩欧美色窝窝色欲| 欧美成人天天综合在线| 亚洲欧美成人A∨在线观看| 岛国AV动作片免费观看| 巨大黑人极品VIDEOS精品| 性高朝久久久久久久3小时| 被公侵犯肉体中文字幕无码| 久久亚洲AV无码精品色午夜麻豆 | 丰满顿熟妇好大BBBBBΒ| 美女高潮无遮挡免费视频| 亚洲AV午夜国产精品无码中文字| 差差漫画在线观看登录页面弹窗| 久久亚洲精品综合国产仙踪林 | 国产精品久久久久久久影院 | 午老司机午夜福利视频| PYTHON人马大战CSDN| 久久天堂综合亚洲伊人HD妓女| 性色AⅤ无码久久久久久精品| 成人H动漫精品一区二区| 免费观看人成影片| 亚洲熟妇色XXXXX爽| 国产未成女一区二区三区| 日韩无码2021| CHINESE叫床对白VIDEOS| 久久亚洲精品中文字幕| 亚洲精品无码GV在线观看| 国产成人精品日本亚洲成熟| 人人妻人人澡人人爽超污| 50岁老熟人乱一区二区三区| 久久老子午夜精品无码| 亚洲国产不卡久久久久久 | 4D肉蒲团之性奴大战奶水| 久99久精品免费视频热| 亚洲AV日韩AV永久无码免下载| 国产AⅤ爽AV久久久久成人精品| 人妻少妇无码精品专区| 99精品无人区乱码在线观看 | 人妻精品久久无码区| 综合一区无套内射中文字幕| 久久精品久久精品中文字幕| 亚洲精品99久久久久中文字幕| 国产女人高潮视频在线观看| 玩弄丰满少妇人妻视频| 丰满性熟妇ⅩXXOOOZZX| 日韩GAY小鲜肉啪啪18禁| 把腿扒开做爽爽视频| 欧美日韩视频一区二区| 69无人区卡一卡二卡| 美女裸体A级毛片| 尤物AV无码色AV无码| 久久无码中文字幕免费影院| 亚洲日韩精品无码专区网址 | 大尺度一对一视频聊天软件| 人人妻人人妻人人人人妻妻人人人人| 99久RE热视频这只有精品6| 年轻老师的滋味3在观整有限中字 年轻夫妻把小孩哄睡后开监控 | 欧美人与劲物XXXXZ0OZ| 最新精品国偷自产在线下载| 蜜芽AⅤ色欲AV浪潮夜夜嗨| 中文字幕无码日韩专区免费 | 日韩精品人妻AV一区二区三区| А√在线中文网新版地址在线| 欧美日韩人妻精品一区二区在线| CHINESE老女人老熟妇HD| 欧美视频一区二区三区| YW尤物AV无码点击进入福利| 人妻聚色窝窝人体WWW一区| 爆乳上司JULIA中文字幕| 日韩精品人妻系列无码AV东京| 成人网站V片免费观看| 日韩人妻无码AⅤ中文字幕| 丰满浓毛的大隂户自慰| 天堂8在线新版官网| 国产乱女乱子视频在线播放| 小雪你的奶好大把腿张开| 国外亚洲成AV人片在线观看| 亚洲精品卡一卡2卡3卡4卡| 精品国产一区二区三区吸毒 | 综合 欧美 亚洲日本| 女邻居给我口爆18P| JEALOUSVUE成熟MON| 日本妇人成熟免费中文字幕| 公侵犯玩弄漂亮人妻优| 西西人体午夜视频无码| 狠狠色欧美亚洲综合色| 亚洲中文字幕精品无码AV| 免费的视频BGM大全软件下载| 7M精品福利视频导航| 日本高清无卡码一区二区久久| 乖我们在办公室试试| 亚洲AV成人无码网站| 精品乱码久久久久久中文字幕 | 无码国产乱人伦偷精品视频 | 亚洲AV日韩AV高潮潮喷无码| 精品人妻无码中字系列| 在线 亚洲 国产 欧美| 欧美无人区码卡二卡3卡4乱码| 丁香花高清在线观看完整版| 小雪被老汉玩遍各种方式电影| 精品人妻大屁股白浆无码| 中文在线っと好きだっ最新版| 琪琪午夜伦伦电影理论片| 高清毛茸茸的中国少妇| 亚洲AⅤ天堂无码专区-百度| 久久久久久国产精品无码下载| 696969C大但人文艺术作品| 日本三级香港三级人妇99| 国产男女爽爽爽免费视频| 野花社区免费观看高清在线1日本| 男人J桶进女人J无遮挡| 成人无码区免费A∨| 亚洲AV日韩AV无码AV| 久久久久亚洲AV成人无码| YSL千人千色AE86V10| 无码综合天天久久综合网色吧影院 | 久爱无码免费视频在线| AV色综合久久天堂AV色综合在| 熟妇人妻无乱码中文字幕真矢织江| 国内精品一线二线三线黄| 永久免费观看美女裸体的网站| 人妻 清高 无码 中文字幕| 国产精品视频一区二区三区不卡| 亚洲综合精品成人| 人人超碰人人超级碰国| 国产蜜芽尤物在线一区| 中国少妇嫖妓BBWBBW| 少妇爆乳无码AV无码波霸| 精品国产乱子伦一区二区三区| 99国产精品自在自在久久| 偷拍亚洲另类无码专区制服| 久久婷婷人人澡人人喊人人爽| 擦老太BBB擦BBB擦BBB擦| 亚洲成AV人片无码迅雷下载| 欧美狂野乱码一二三四区| 国产日韩AⅤ无码一区二区三区| 中文字幕久久久久人妻中出| 少妇高潮惨叫久久久久电影69| 久久AV秘 一区二区三区蜜桃| 锕锕锕锕锕锕好污网站大全| 亚洲AV无一区二区三区| 人妻ay无码一区二区三区| 韩国理论电费2023最| S货叫大点声C烂你的SB| 亚洲超碰无码色中文字幕97|