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

物聯網工業網關如何與云平臺進行交互?

2021-04-01 14:49:53 星創易聯 534

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

5g/4g工業路由網關


與云平臺之間的 MQTT 連接

目前的幾大物聯網云平臺,都提供了不同的接入方式。對于網關來說,應用最多的就是 MQTT 接入。

我們知道,MQTT 只是一個協議而已,不同的編程語言中都有實現,在 C 語言中也有好幾個實現。

在網關內部,運行著一個后臺 deamon: MQTT Broker,其實就是 mosquitto 這個可執行程序,它充當著消息總線的功能。這里請大家注意:因為這個消息總線是運行在嵌入式系統的內部,接入總線的客戶端就是需要相互通信的那些進程。這些進程的數量是有限的,即使是一個比較復雜的系統,最多十幾個進程也就差不多了。因此,mosquitto 這個實現是完全可以支撐系統負載的。

那么,如果在云端部署一個 MQTT Broker,理論上是可以直接使用 mosquitto 這個實現來作為消息總線的,但是你要評估接入的客戶端(也就是網關)在一個什么樣的數量級,考慮到并發的問題,一定要做壓力測試。

對于后臺開發,我的經驗不多,不敢(也不能)多言,誤導大家就罪過了。不過,對于一般的學習和測試來說,在云端直接部署 mosquitto 作為消息總線,是沒有問題的。

Proc_Bridge 進程:外部和內部消息總線之間的橋接器

下面這張圖,說明了 Proc_Bridge 進程在這個模型中的作用:

5g/4g工業路由網關

從云平臺消息總線接收到的消息,需要轉發到內部的消息總線;從內部消息總線接收到的消息,需要轉發到云平臺的消息總線;

如果用 mosquitto 來實現,應該如何來實現呢?

1. mosquitto 的 API 接口

mosquitto 這個實現是基于回調函數的機制來運行的,例如:

// 連接成功時的回調函數void my_connect_callback(struct mosquitto *mosq, void *obj, int rc){    // ...}
// 連接失敗時的回調函數void my_disconnect_callback(struct mosquitto *mosq, void *obj, int result){    // ...}
// 接收到消息時的回調函數void my_message_callback(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message){  // ..}
int main(){    // 其他代碼    // ...        // 創建一個 mosquitto 對象    struct mosquitto g_mosq = mosquitto_new("client_name", true, NULL);        // 注冊回調函數    mosquitto_connect_callback_set(g_mosq, my_connect_callback);    mosquitto_disconnect_callback_set(g_mosq, my_disconnect_callback);    mosquitto_message_callback_set(g_mosq, my_message_callback);    // 這里還有其他的回調函數設置      // 開始連接到消息總線    mosquitto_connect(g_mosq, "127.0.0.1", 1883, 60);      while(1)    {      int rc = mosquitto_loop(g_mosq, -1, 1);      if (rc) {        printf("mqtt_portal: mosquitto_loop rc = %d ", rc);        sleep(1);        mosquitto_reconnect(g_mosq);      }    }    mosquitto_destroy(g_mosq);    mosquitto_lib_cleanup();    return 0;}

以上代碼就是一個 mosquitto 客戶端的最簡代碼了,使用回調函數的機制,讓程序的開發非常簡單。

mosquitto 把底層的細節問題都幫助我們處理了,只要我們注冊的函數被調用了,就說明發生了我們感興趣的事件。

這樣的回調機制在各種開源軟件中使用的比較多,比如:glib 里的定時器、libevent通訊處理、libmodbus 里的數據處理、linux 內核中的驅動開發和定時器,都是這個套路,一通百通!

在網關中的每個進程,只需要添加上面這部分代碼,就可以掛載到消息總線上,從而可以與其它進程進行收發數據了。

2. 利用 UserData 指針,實現多個 MQTT 連接

上面的實例僅僅是連接到一個消息總線上,對于一個普通的進程來說,達到了通信的目的。

但是對于 Proc_Bridge 進程來說,還沒有達到目的,因為這個進程處于橋接的位置,需要同時連接到遠程和本地這兩個消息總線上。那么應該如何實現呢?

看一下 mosquitto_new 這個函數的簽名:

* obj - A user pointer that will be passed as an argument to any *      callbacks that are specified.最后一個參數的作用是:可以設置一個用戶自己的數據(作為指針傳入),那么mosquitto 在回調我們的注冊的任何一個函數時,都會把這個指針傳入。
因此,我們可以利用這個參數來區分這個連接是遠程連接?還是本地連接。libmosq_EXPORT struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *obj);

所以,我們可以定義一個結構體變量,把一個 MQTT 連接的所有信息都記錄在這里,然后注冊給 mosquitto。當 mosquitto 回調函數時,把這個結構體變量的指針回傳給我們,這樣就拿到了這個連接的所有數據,在某種程度上來說,這也是一種面向對象的思想。

// 從來表示一個 MQTT 連接的結構體typedef struct{  char *id;  char *name;  char *pw;  char *host;  int port;  pthread_t tHandle;  struct mosquitto *mosq;  int mqtt_num;}MQData;

完整的代碼已經放到網盤里了,為了讓你先從原理上看明白,我把關鍵幾個地方的代碼貼在這里:

// 分配結構體變量MQData userData = (MQData *)malloc(sizeof(MQData));
// 設置屬于這里連接的參數: id, name 等等
// 創建 mosquitto 對象時,傳入 userData。struct mosquitto *mosq = mosquitto_new(userData->id, true, userData);
// 在回調函數中,把 obj 指針前轉成 MQData 指針static void messageCB(struct mosquitto *mosq, void *obj, const struct mosquitto_message *message){  MQData *userData = (MQData *)obj;    // 此時就可以根據 userData 指針中的內容分辨出這是哪一個鏈接了}

另外一個問題:不知道你是否注意到示例中的 mosquitto_loop() 這個函數?這個函數需要放在 while 死循環中不停的調用,才能出發 mosuiqtto 內部的事件。(其實在 mosuiqtto 中,還提供了另一個簡化的函數 mosquitto_loop_forever)。

也就是說:在每個連接中,需要持續的觸發 mosquitto 底層的事件,才能讓消息系統順利的收發。因此,在示例代碼中,使用兩個線程分別連接到云平臺的總線和內部的總線。


網站首頁
解決方案
產品中心
在線咨詢
亚洲日本一线产区和二线| 在线日产精品一区| 曰韩一区二区三区视频| ASS美女裸体洗澡PICS| 草莓视频在线播放视频| 国产精品三级AV三级AV三级| 精品人妻少妇一区二区三区| 亚洲欧洲精品成人久久曰影片| 亚洲午夜无码久久久久软件| 9LPORM自拍视频区九色| 在办公室被C到呻吟的动态图| WWW国产精品内射熟女| 国产大学生粉嫩无套流白浆| 精品视频一区二区三区在线观看| 女人和拘做受全过程免费| 色狠狠色噜噜AV综合五区| 亚洲AV午夜成人片忘忧草在线| 无码人妻AⅤ一区二区三区夏目 | 九九视频麻婆豆腐在线观看| 年轻漂亮的人妻被公侵犯BD免费版 | 国产精品无码素人福利不卡| 久久夜色精品国产噜噜AV| 日本熟妇XXⅩ浓密黑毛| 亚洲成AV人片在WWW色猫咪| 97精品伊人久久大香线蕉APP| 国产成人精品A∨一区二区| 久久久久久A亚洲欧洲AV冫| 日本最新免费二区三区| 亚洲精品456在线播放| MM131亚洲国产美女久久| AV色欲无码人妻中文字幕| 国产肥熟女视频一区二区三区| 久久精品国产免费播| 日韩精品亚洲人成在线观看| 亚洲蜜桃无码视頻精品网| 薄白丝小仙女自慰喷水| 激情综合一区二区迷情校园| 奇米四色7777中文字幕| 日本少妇自慰免费完整版| 亚洲AV日韩综合一区久热| 985大学排名一览表| 国产熟妇与子伦HD| 欧美日韩视频一区二区| 亚洲AV无码国产一区二区三区| 99这里只有精品| 国内自拍视频一区二区三区| 人妻少妇(11一32)章| 天天爽夜夜爽夜夜爽| 一本一道久久A久久精品综合| 丰满女教师中文字幕5| 久久综合无码中文字幕无码TS| 睡着了强行挺进岳身体| 亚洲AV无码专区国产乱码波多野| JAPONENSIS性护士| 精品国产三级A在线观看| 撒尿BBWBBW毛| 在线精品国产一区二区三区| 国产欧美精品一区AⅤ影院| 欧美人与物VIDEOS另类XX| 亚洲欧美成人精品香蕉网| 丰满熟妇BBWBBWBBWBB| 免费AV一区二区三区| 亚洲AV永久综合在线观看尤物| 成人污污污WWW网站免费| 毛耸耸熟妇性XXXX交潮喷| 亚洲AV永久无码天堂网| 俄罗斯人和欧洲人的性格差异| 毛茸茸的中国女BBW| 亚洲第一SE情网站| 国产AV无码专区影视| 欧美人妻体内射射| 亚洲制服丝袜中文字幕在线| 国产免费又爽又色又粗视频| 久久精品熟女亚洲AV麻豆网站| 婷婷成人小说综合专区| YELLOW在线资源免费观看| 久久无码无码久久综合综合| 性一交一乱一伦一| 妇女性内射冈站HDWWWOOO| 欧美人和黑人牲交网站上线| 野花香高清在线观看视频播放免费| 国产免费人成在线视频| 揉着我的奶从后面进去视频| [中文] [3D全彩H漫]新来| 丰满少妇被猛烈进入| 男人吃奶摸下挵进去好爽| 亚洲午夜久久久久久噜噜噜 | 自拍偷区亚洲综合美利坚| 精品国产乱码久久久久久蜜桃| 无码国模大尺度视频在线观看| 成人国产精品一区二区免费看| 女人18片毛片60分钟| 一二三四免费观看在线6| 精品国产一区二区三区AV性色| 无码精品人妻一区二区三区老牛| 成熟人妻换╳╳╳╳| 秋霞国产午夜伦午夜无码灬| 中文字幕乱码亚洲无线码三区| 久久99国产综合精品| 亚洲AV永久无码精品三区在线4| 国产精品国产三级在线专区| 久久午夜无码免费| 亚洲国产一区二区A毛片| 国产看黄网站又黄又爽又色| 日韩无码一区视频| 成 人 A V免费视频在线观看 | 中国老太卖婬HD播放| 久久精品成人欧美大片 | 国内精品久久久久影院蜜芽| 无码AⅤ精品一区二区三区| 国产99精品视频一区二区三区| 久久天堂AV女色优精品| 亚洲精品无码久久久久苍井空| 黑人大雞巴XⅩⅩ| 亚洲AV日韩精品久久久久久| 国产特级毛片AAAAAA高潮流| 无码中文精品视视在线观看| 99精品视频在线观看婷婷| 妺妺坐在我腿上勃起弄了应用| 中文字幕一区二区三区乱码人妻| 久久亚洲AV无码西西人体| 一本大道久久精品 东京热| 久久青青草原精品国产APP| 亚洲综合无码一区二区| 久久亚洲精品成人无码网站| 伊人久久大香线蕉午夜AV| 开丫头小嫩苞疼死了| 在线天堂中文WWW官网| 妺妺窝人体色www聚色窝欢迎 | 麻豆人人妻人人妻人人片AV| 曰韩人妻无码一区二区三区综合部 | 婷婷久久综合九色综合绿巨人 | 成人午夜性A级毛片免费| 亚洲AV成人片无码网站网一区| 久久精品成人欧美大片| JAPAN强要VIDEOD警妞| 日韩和的一区二区区别是什么| 草草永久地址发布页①| 亚洲日本中文字幕乱码在线| 人妻中字视频中文乱码| 无码精品人妻一区二区三区aV| 国产精品99久久久久久宅男| 无码国产精品一区二区免费VR| 久爱WWW成人网免费视频| CAOPORN免费公开视频| 午夜精品久久久久9999| ATLANTICOCEAN巨大| 午夜A级成人免费毛片| 久久人妻夜夜做天天爽| 国语对白国产成人AⅤ片| JAPANESEHD熟女熟妇伦| 野花日本大全免费观看3中文版| 欧美XXXX黑人又粗又长| 国产成人牲交在线观看视频 | 亚洲综合色AAA成人无码| 色爱无码AⅤ综合区| 久久99国产亚洲高清观看首页 | 中国鲜肉GAY高中XX禁18网| 日韩AV无码精品一二三区| 国产香港明星裸体XXXX视频| 99久久久无码国产精品9| 亚洲无人区码一码二码三码四码| 午夜福利国产成人无码GIF动图| 国产CHINESE中国HDXX| 亚洲日韩精品无码AV一区二区三| 婷婷五月综合色中文字幕| 欧美性一区二区三区| 啊灬啊灬啊灬快灬高潮少妇| 欧美JIZZ18性欧美| 东北浪妇王梅娟偷人视频| 少妇做爰XXXⅩ性XXXHD| 国产精品毛片Av无码一区二区 | 推油少妇久久99久久99久久| 精品久久人人爽人人玩人人妻| 亚洲AV无码成人精品涩涩 | 毛多水多肥胖老太婆| 波多野结衣AV电影在线观看| 韩漫漫画无遮挡免费| 夜夜添夜夜添夜夜摸夜夜摸| 人妻无奈被迫屈辱1-9| 国产拍揄自揄精品视频| 影帝隔着内裤滑进去了H| 日本无人区码一码二码三码四码 | 天堂А√中文在线官网| 精品国产18久久久久久| A级毛片毛片免费观看丝瓜 | 亚洲AV永久无码精品水牛影视| 免费无码又爽又刺激激情视频软件| 纯肉无遮挡H肉动漫在线观看网址 纯肉无遮挡H肉动漫在线观看国产 | 成人中文乱幕日产无线码| 亚洲国产美女精品久久久久∴ | 131美女爱做视频国产福利| 少妇夜夜爽夜夜春夜夜高潮 | 丰满妇女BBWBBWBBWBB| 亚洲精品国产AV现线| 人妻少妇乱子伦精品无码专区电影| 国产午夜激无码AV毛片不| 91老熟女老女人国产老太毛多| 无码人妻一区二区三区精品视频| 林静公交车被做到高C|