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

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

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 消息總線。在下一篇文章中,我們來專門講解這部分的內容,并提供一個實現橋接功能的代碼模板。


網站首頁
解決方案
產品中心
在線咨詢
无翼乌全彩工口里番库| 国产真实乱XXXⅩ视频| 给个网站2021年直接进入的| 国产AV一区二区三区天堂综合网| 亚洲无码成人av| 综合在线视频精品专区| 玉蒲团Ⅱ之性战奶水潘金莲小说| 亚洲日韩乱码1区二区| 中文字幕AV伊人AV无码AV| 锕锕锕锕锕锕锕锕好疼小视频软件| 88国产精品视频一区二区三区 | 欧美人与禽2O2O性论交| 人妻少妇88久久中文字幕| 日韩人妻中文无码一区二区七区| 日本熟妇色VIDEO| 色噜噜狠狠狠综合曰曰曰| 熟女精品视频一区二区三区| 亚洲AV成人男人的天堂手机| 在线精品国产成人综合| 东欧av性无码高清| 久久WWW免费人成一看片| 欧美一区二区放荡人妇| 色噜噜人妻av无码| 亚洲老熟女 @ TUBEUM| A级毛片免费全部播放| 国产午夜福利内射青草| 免费人成视频网站在线18| 欧美日韩免费专区在线| 亚洲AV无码成H人在线观看| 亚洲裸男GAY自慰网站| 中文字字幕在线乱码| 国产成人精品午夜福利在线观看 | 亚洲爱婷婷色婷婷五月| 艳妇乳肉豪妇荡乳AV| 隔壁人妻偷人BD中字| 精品国偷自产在线视频| 日韩中文字幕中文无码久本草| 久久国产精品-国产精品| 裸体美女扒开下部无遮挡网站免费| 欧美丰满熟妇乱XXXXX流白浆| 午夜福利麻豆国产精品| xxxx国产精品| 精品一区二区三区无码免费直播| 色综合伊人色综合网站无码| 中文字幕在线观看亚洲日韩| 国产现实无码AV| 女人扒开的小泬高潮喷水小说| 亚洲AV无码片区一区二区三区 | 无码人妻毛片丰滿熟婦区毛片色欲 | 东京热人妻中文无码AV| 女人被狂躁到高潮视频免费软件| 亚洲AV无码成H人动漫在线观看| 被窝影院午夜无码国产| 六六电影院理论片| 无码中文字幕在线播放2| MONSTER无删减动漫| 麻豆人妻少妇精品无码专区| 亚洲AV无码二区鸳鸯影院| 成人H动漫无码网站久久| 男生坤坤放在女生坤坤叫什么| 亚洲内射少妇AV影院| 国产乱人伦偷精品视频免观看| 日产无人区一线二线三线小| 97人人澡人人爽人人模亚洲| 久久久久国产综合AV天堂| 亚洲大尺度专区无码| 国产玉足榨精视频在线观看| 国产三级精品三级男人的天堂| 麻豆国产VA免费精品高清在线| 亚洲乱色伦图片区小说| 国产在线观看无码免费视频| 少妇人妻无码专区视频免费| 八戒八戒神马影院在线观看 | 粗大的内捧猛烈进出无码| 欧美又粗又大XXXXBBBB疯| 2019四虎影视最新在线| 久久国产色欲AV38| 野花影视免费观看高清| 久久久无码中文字幕久| 野花视频在线观看| 久久青草精品38国产| 伊人伊成久久人综合 成人| 久久天天躁狠狠躁夜夜AV浪潮| 少妇AV一区二区三区无码| 在教室伦流澡到高潮H强圩| 国产乱码一二三区精品| 玩丰满少妇XXXXXⅩ性麻| 国产精品久久无码不卡| 午夜伦4480YY私人影院免费| 国产成人无码区免费A∨视频网站| 人人妻人人澡人人爽人人精品图片| 巴西BBABBABBABBA| 日本强伦姧人妻完视频正版| 成人永久免费福利视频免费| 孰妇XXXXXX的性生话| 国产欧美精品一区二区三区 | 巨大黑人XXXXX高潮| 坐公交车居然被弄了2个小时小说| 廖承宇做受被C22分钟视频| 99精产国品一二三产区区| 欧美日韩一区二区成人午夜电影 | 无码免费毛片手机在线无卡顿 | 野外做受又硬又粗又大视频√| 男女后进式猛烈XX00动态图| 被按摩的人妻中文字幕| 日韩精品视频三区| 国产网红无码精品视频| 亚洲日韩乱码中文无码蜜桃臀| 久久久久亚州AⅤ无码专区首| 7777788888管家婆中特| 太平公主秘史在线观看免费| 精品久久久久久久无码人妻热| 中文字幕一区二区三区久久网站 | 公侵犯人妻一区二区三区| 亚洲AV综合色区无码另类小说| 精品无码久久久久久久久| 99久久国产综合精麻豆| 我是你亲妈呀你爸知道死你| 久久精品国产亚洲AV影院| 啊灬啊灬啊灬快灬高潮了视频网站| 精品无码国产一区二区三区AV| 婷婷五月六月综合缴情| 久久久久久人妻一区二区三区| 别揉我奶头~嗯~啊~动态图视频 | 久久精品国产亚洲AV麻豆王友容 | 日韩免费无码专区精品观看| 国产清纯美女爆白浆视频 | 日本真人裸交试看120秒| 丰满熟妇大肉唇张开| 亚洲日韩乱码中文无码蜜桃臀| 丰满少妇高潮在线播放不卡 | 亚洲美女国产精品久久久久久久久| 邻居少妇张开腿让我爽了一夜视频| 旅人蕉天堂鸟的区别视频| 欧美最猛黑人XXXXX猛交| 亚洲欧美另类在线观看| 无码人妻一区二区三区精品视频年 | 日本一卡二卡三卡四卡2021| 久久精品国产亚洲AV高清热| 房中之术御女之功秘术| 伊人久久大香线蕉AV最新午夜| 忘忧草日本社区WWW在线| 欧美中日韩免费观看网站| 黑人男女粗大猛烈进出视频| 70歳の熟女セックス| 亚洲精品WWW久久久久久| 私人家庭影院5577| 强行征服邻居人妻| 久久久久亚洲AV无码成人片麻豆| 国产丰满麻豆HDXVIDEOS| CHINESE0LDMAN老汉| 亚洲成AV人片一区二区| 欧洲熟妇色XXXXⅩ欧洲老妇色| 久久久WWW免费人成精品| 国产乱码日产精品BD| 丰满人妻中文字幕| 波多野结衣AV无码| 9612黄桃网站进入页面直播| 亚洲最大AV在线| 亚洲AV永久无码精品主页| 色妞WWW精品视频| 免费无码久久成人网站| 久久久久久亚洲AV无码蜜芽| 国精产品一区一区三区糖心| 差差差很疼APP大全免费下载软| 50熟妇的长奶头满足了我| 一区二区三区无码AV不卡| 无码国产乱人伦偷精品视频 | 国产色视频网站免费| 国产成人三级在线视频网站观看| 大陆熟妇丰满多毛XXXX| 巴西女人与禽2O2O性论交| 呦小BBW搡BBBB搡BBBB| 野花香高清在线观看视频播放免费| 无码专区人妻系列日韩| 搡BBBB搡BBBB搡BBBB| 日韩高清免费A级毛片| 人人妻人人澡人人爽欧美精品| 欧美丰满熟妇XXXX性大屁股| 女人被狂躁c到高潮视频| 男生把QQ放进女生的QQ里在线 | 亚洲AV成人片在线观看18| 日韩AⅤ无码AV一区二区三区| 男人边吃奶边挵进去呻吟动态图| 国产成人无码区免费A∨视频网站| AV 日韩 人妻 黑人 综合| 24小时在线看免费观看直播| 51VV社区视频在线视频观看| YELLOW免费观看高清在线| 2021韩剧在线观看韩剧网| 97夜夜澡人人爽人人喊中国片| АⅤ资源中文在线天堂| 床震吃胸膜奶免费视频| 国产精品玖玖玖在线资源| 国产精品国产三级国产试看| 国产又粗又黄又爽的大片| 娇妻被领导抱进卧室| 看全色黄大色大片免费久久| 亲近相奷对白中文字幕片| 欧美一区二区在线视频|