亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        物聯(lián)網(wǎng)網(wǎng)關(guān)實時雙向通信模塊化設(shè)計

        2021-05-20 06:50:34陳文藝
        計算機工程與設(shè)計 2021年5期
        關(guān)鍵詞:設(shè)備系統(tǒng)

        陳文藝,高 婧,楊 輝

        (1.西安郵電大學(xué) 現(xiàn)代郵政學(xué)院,陜西 西安 710061;2.西安郵電大學(xué) 通信與信息工程學(xué)院,陜西 西安 710121)

        0 引 言

        基于互聯(lián)網(wǎng)、傳統(tǒng)電信網(wǎng)等信息承載體,讓所有能夠被獨立尋址的普通物理對象實現(xiàn)互聯(lián)互通的網(wǎng)絡(luò)就是物聯(lián)網(wǎng)(internet of things,IOT)[1,2]。文獻(xiàn)[3]提出了物聯(lián)網(wǎng)系統(tǒng)中網(wǎng)關(guān)的作用。在物聯(lián)網(wǎng)通信協(xié)議的選擇中,HTTP協(xié)議采用“請求-應(yīng)答”的方式實現(xiàn)通信,優(yōu)點是方便、敏捷且易于擴展,缺點是無法實現(xiàn)數(shù)據(jù)的實時雙向傳輸[4]。在文獻(xiàn)[5]中提到的MQTT是一種構(gòu)建于TCP/IP上的基于發(fā)布/訂閱(publish/subscribe)模式的“輕量級”通訊協(xié)議,它的有優(yōu)點是開源、簡單和實現(xiàn)方便[6],缺點是功耗很高,且缺乏加密機制。

        為了實現(xiàn)物聯(lián)網(wǎng)網(wǎng)關(guān)和云平臺的實時雙向通信,提高傳輸效率,本文采用在設(shè)計好的開放性的物聯(lián)網(wǎng)平臺上,以Node.js服務(wù)器為運行平臺,利用Redis數(shù)據(jù)庫快速存取技術(shù)[7],設(shè)計基于Socket.IO通信協(xié)議的物聯(lián)網(wǎng)網(wǎng)關(guān)和資源平臺實時雙向通信系統(tǒng)[8]的模塊化處理。與傳統(tǒng)物聯(lián)網(wǎng)通信協(xié)議相比之下,Socket.IO的優(yōu)點是只需要在客戶端與服務(wù)器之間進(jìn)行一次握手,便可快速建立Socket雙向通道,可以實現(xiàn)數(shù)據(jù)的實時雙向傳送,有效節(jié)約寬帶資源,從而提高系統(tǒng)對數(shù)據(jù)模型的實時更新效率,保證系統(tǒng)的穩(wěn)定性和可靠性。

        1 物聯(lián)網(wǎng)開放平臺與網(wǎng)關(guān)

        物聯(lián)網(wǎng)系統(tǒng)從上至下分別為web前端界面、物聯(lián)網(wǎng)云平臺、物聯(lián)網(wǎng)網(wǎng)關(guān)和傳感設(shè)備。通過構(gòu)建物聯(lián)網(wǎng)系統(tǒng)架構(gòu)、云平臺以及網(wǎng)關(guān),實現(xiàn)物聯(lián)網(wǎng)系統(tǒng)的實時雙向通信傳輸。

        1.1 物聯(lián)網(wǎng)系統(tǒng)架構(gòu)

        為方便底層傳感設(shè)備數(shù)據(jù)安全、穩(wěn)定、高效傳輸及存儲,建立物聯(lián)網(wǎng)系統(tǒng)架構(gòu),如圖1所示。

        圖1 物聯(lián)網(wǎng)系統(tǒng)架構(gòu)

        物聯(lián)網(wǎng)系統(tǒng)架構(gòu)主要由底層設(shè)備、物聯(lián)網(wǎng)網(wǎng)關(guān)、物聯(lián)網(wǎng)云平臺以及瀏覽器組成。物聯(lián)網(wǎng)系統(tǒng)使用基于平臺+網(wǎng)關(guān)的開放設(shè)備體系,完成對底層傳感設(shè)備數(shù)據(jù)的接入、處理以及傳輸操作,最終通過前端以界面形式展現(xiàn)給PC端用戶或者移動端用戶。

        1.2 物聯(lián)網(wǎng)云平臺

        云平臺采用統(tǒng)一的資源描述和面向資源的架構(gòu)(ROA),利用異步非阻塞特性,在長連接、多請求的環(huán)境下優(yōu)勢非常明顯[9]。利用Node.js語言高效的數(shù)據(jù)事件引擎、高并發(fā)的處理機制特點[10],來完成云平臺的設(shè)計與實現(xiàn)。物聯(lián)網(wǎng)云平臺架構(gòu)如圖2所示。

        圖2 物聯(lián)網(wǎng)云平臺架構(gòu)

        為了完成對底層設(shè)備數(shù)據(jù)的實時傳輸和擁有更高效率的處理機制,解決了HTTP協(xié)議不具有實時性和MQTT協(xié)議只能在處理器和內(nèi)存資源有限制的硬件設(shè)備中運行的缺點,因此本文采用基于Socket.IO通信協(xié)議的實時雙向傳輸機制,對云平臺進(jìn)行模塊劃分,可以更快速和高效完成對底層設(shè)備數(shù)據(jù)的處理與應(yīng)用。

        將云平臺劃分為機器服務(wù)器、資源服務(wù)器、事件服務(wù)器和用戶服務(wù)器4部分。其中用戶web服務(wù)器用來實現(xiàn)平臺與web端的交互,物聯(lián)網(wǎng)資源服務(wù)器則用來完成平臺數(shù)據(jù)的增刪改查、平臺事件的檢測和事件操作任務(wù)分發(fā),物聯(lián)網(wǎng)事件服務(wù)器則用來維護(hù)事件和操作處理隊列,實時處理事件,通過在機器服務(wù)器中構(gòu)建Socket.IO服務(wù)器端來完成平臺與網(wǎng)關(guān)的數(shù)據(jù)實時雙向傳輸。設(shè)備成功接入以后,在網(wǎng)關(guān)對設(shè)備數(shù)據(jù)進(jìn)行解析和處理,將設(shè)備的數(shù)據(jù)通過物聯(lián)網(wǎng)網(wǎng)關(guān)傳輸?shù)皆破脚_,完成設(shè)備與平臺之間的數(shù)據(jù)傳輸過程,讓平臺對設(shè)備的操作變得更加簡單和方便,工作量得以減少,擁有較高的工作效率。

        1.3 物聯(lián)網(wǎng)網(wǎng)關(guān)

        物聯(lián)網(wǎng)網(wǎng)關(guān)作為連接云平臺和底層設(shè)備的橋梁,完成對底層設(shè)備的認(rèn)證、數(shù)據(jù)上傳、數(shù)據(jù)更新等管理與應(yīng)用。為了實現(xiàn)網(wǎng)關(guān)對設(shè)備的協(xié)議的轉(zhuǎn)換、管理與廣泛接入,因此我們對網(wǎng)關(guān)進(jìn)行分層架構(gòu)和系統(tǒng)模塊設(shè)計。

        1.3.1 構(gòu)建網(wǎng)關(guān)分層架構(gòu)

        在網(wǎng)關(guān)分層架構(gòu)中,可將其分為由平臺通信層和數(shù)據(jù)模型管理同步層組成的網(wǎng)關(guān)內(nèi)部模塊,由協(xié)議適配層和感知接口層組成的設(shè)備接入模塊兩部分組成,并且在兩個模塊之間采用TCP進(jìn)行通信,來實現(xiàn)設(shè)備的接入認(rèn)證,設(shè)備的管理以及設(shè)備數(shù)據(jù)的協(xié)議轉(zhuǎn)化。網(wǎng)關(guān)分層架構(gòu)如圖3所示。

        圖3 網(wǎng)關(guān)分層架構(gòu)

        圖3中,物聯(lián)網(wǎng)網(wǎng)關(guān)分層架構(gòu)主要由感知接口層、協(xié)議適配層、數(shù)據(jù)模型同步與處理層以及平臺通信層組成。其中通過在平臺通信層構(gòu)建Socket.IO客戶端,以及在機器服務(wù)器中構(gòu)建服務(wù)器端,來完成物聯(lián)網(wǎng)平臺雙向通信系統(tǒng)的實現(xiàn);數(shù)據(jù)模型同步與處理層用來實現(xiàn)平臺數(shù)據(jù)下發(fā)以及設(shè)備數(shù)據(jù)上傳的過程,實現(xiàn)平臺模型與網(wǎng)關(guān)模型的同步更新;協(xié)議適配層來完成設(shè)備數(shù)據(jù)模型與實際設(shè)備間的數(shù)據(jù)轉(zhuǎn)換,實現(xiàn)物聯(lián)網(wǎng)平臺對各類設(shè)備的接入;感知接口層實現(xiàn)設(shè)備的接入驅(qū)動程序,對于大多數(shù)通用設(shè)備,提供通用適配程序;開發(fā)程序來連接非標(biāo)設(shè)備。

        1.3.2 構(gòu)建網(wǎng)關(guān)系統(tǒng)

        網(wǎng)關(guān)系統(tǒng)的功能是完成底層傳感設(shè)備數(shù)據(jù)的獲取和存儲、在原有基礎(chǔ)上加快事件處理速度、減緩云平臺的壓力,實現(xiàn)物聯(lián)網(wǎng)網(wǎng)關(guān)對底層傳感設(shè)備的應(yīng)用和管理。網(wǎng)關(guān)系統(tǒng)模塊如圖4所示。

        圖4 網(wǎng)關(guān)系統(tǒng)模塊

        圖4中,網(wǎng)關(guān)系統(tǒng)模塊由Socket.IO通信模塊、網(wǎng)關(guān)和設(shè)備模型模塊、網(wǎng)關(guān)和設(shè)備管理與事件處理模塊、設(shè)備通信模塊以及網(wǎng)關(guān)心跳、加密處理模塊5部分組成。Socket.IO通信模塊功能是實現(xiàn)物聯(lián)網(wǎng)平臺和網(wǎng)關(guān)的實時雙向通信,完成設(shè)備的接入等一系列操作;網(wǎng)關(guān)和設(shè)備模型模塊功能是在網(wǎng)關(guān)上電后自動與平臺通信,按平臺注冊數(shù)據(jù)模型創(chuàng)建網(wǎng)關(guān)和設(shè)備物理模型,并維持與平臺實時同步更新;網(wǎng)關(guān)和設(shè)備管理與事件處理模塊功能是完成對網(wǎng)關(guān)和設(shè)備的狀態(tài)管理、網(wǎng)關(guān)的配置管理和設(shè)備的位置及操作管理,同時實現(xiàn)對網(wǎng)關(guān)設(shè)備模型事件處理模塊和事件監(jiān)測模塊的處理;設(shè)備通信模塊功能是通過TCP通信來實現(xiàn)底層設(shè)備的接入,完成傳感設(shè)備數(shù)據(jù)和物理網(wǎng)關(guān)設(shè)備模型數(shù)據(jù)的轉(zhuǎn)換;網(wǎng)關(guān)心跳管理模塊功能是需要定時上傳心跳消息到機器服務(wù)器,否則機器服務(wù)器認(rèn)為網(wǎng)關(guān)關(guān)機,并上傳狀態(tài)到平臺數(shù)據(jù)庫;加密處理模塊功能是采用MD5加密方式對網(wǎng)關(guān)接入認(rèn)證時分配的userKey和網(wǎng)關(guān)ID進(jìn)行認(rèn)證授權(quán)網(wǎng)關(guān)。

        2 網(wǎng)關(guān)平臺雙向通信系統(tǒng)

        通過構(gòu)建機器服務(wù)器、物聯(lián)網(wǎng)雙向通信系統(tǒng)以及物聯(lián)網(wǎng)網(wǎng)關(guān)分模塊設(shè)計,實現(xiàn)物聯(lián)網(wǎng)系統(tǒng)雙向通信傳輸。

        2.1 機器服務(wù)器設(shè)計

        在物聯(lián)網(wǎng)資源平臺內(nèi)部構(gòu)建機器服務(wù)器,用來實現(xiàn)網(wǎng)關(guān)設(shè)備的接入、身份驗證以及模型同步。機器服務(wù)器模塊如圖5所示。

        圖5 機器服務(wù)器模塊

        圖5中,機器服務(wù)器模塊主要由Redis消息隊列模塊、消息處理模塊、接口模塊和Socket.IO服務(wù)器模塊構(gòu)成。

        Redis消息隊列可以緩存數(shù)據(jù),解決數(shù)據(jù)高并發(fā)情況,Socket.IO服務(wù)器端與Socket.IO客戶端進(jìn)行數(shù)據(jù)的實時雙向交互;消息處理模塊來實現(xiàn)對消息的解析、處理和分發(fā);接口模塊用來實現(xiàn)數(shù)據(jù)的交互和緩存讀取的作用。

        通過在物聯(lián)網(wǎng)平臺機器服務(wù)器中建立Socket.IO服務(wù)器和網(wǎng)關(guān)中建立Socket.IO客戶端,來完成平臺與網(wǎng)關(guān)的雙向?qū)崟r通信,并完成網(wǎng)關(guān)設(shè)備的認(rèn)證、網(wǎng)關(guān)設(shè)備數(shù)據(jù)的上傳與更新和網(wǎng)關(guān)/設(shè)備的心跳傳輸。在完成網(wǎng)關(guān)設(shè)備的認(rèn)證接入后,從物聯(lián)網(wǎng)資源平臺讀取已注冊好的模型,完成網(wǎng)關(guān)設(shè)備模型的同步更新。

        2.2 雙向通信系統(tǒng)設(shè)計

        Socket.IO是Node.js平臺下基于WebSocket協(xié)議的實時通信模塊,它由客戶端的JavaScript和服務(wù)端的Node.js組成[11]。其通信方式和傳統(tǒng)的HTTP協(xié)議不同之處在于,客戶端和服務(wù)端之間只需要進(jìn)行一次握手過程,之后便建立快速的Socket雙向通道,在原理上有效地節(jié)約了服務(wù)端寬帶資源,且提高系統(tǒng)傳輸效率。

        在物聯(lián)網(wǎng)系統(tǒng)中,基于Socket.IO雙向通信協(xié)議完成物聯(lián)網(wǎng)網(wǎng)關(guān)和云平臺的數(shù)據(jù)傳輸,其中包括底層傳感設(shè)備的接入認(rèn)證、數(shù)據(jù)和心跳消息傳輸。設(shè)備認(rèn)證過程主要實現(xiàn)底層設(shè)備的安全接入,保證系統(tǒng)的安全性,并返回相應(yīng)的數(shù)據(jù)模型到網(wǎng)關(guān)側(cè);數(shù)據(jù)傳輸過程不僅實現(xiàn)設(shè)備數(shù)據(jù)的有效收集并將其存入系統(tǒng)數(shù)據(jù)庫中,同時也可根據(jù)平臺側(cè)需求完成數(shù)據(jù)模型的同步更新與修改,最后需要定時上傳設(shè)備心跳消息,保證設(shè)備保持在線狀態(tài),同時發(fā)送給云平臺。

        2.3 網(wǎng)關(guān)模塊化設(shè)計

        根據(jù)需求的不同,完成網(wǎng)關(guān)的功能模塊劃分,對劃分好的模塊進(jìn)行封裝管理與開發(fā),且各模塊之間不存在耦合,方便后續(xù)的軟件程序化設(shè)計。網(wǎng)關(guān)模塊化設(shè)計如圖6所示。

        圖6 網(wǎng)關(guān)模塊化設(shè)計

        如圖6所示,針對本系統(tǒng),網(wǎng)關(guān)主要完成3部分操作:一是網(wǎng)關(guān)設(shè)備認(rèn)證模塊,當(dāng)有底層設(shè)備接入時,網(wǎng)關(guān)發(fā)送認(rèn)證請求到平臺端,認(rèn)證成功,返回物理網(wǎng)關(guān)數(shù)據(jù)模型;二是數(shù)據(jù)上傳與指令下發(fā)模塊,底層傳感設(shè)備可以實現(xiàn)將數(shù)據(jù)實時上傳到平臺并且存入系統(tǒng)的數(shù)據(jù)庫中,與此同時,完成平臺模擬數(shù)據(jù)類型和設(shè)備數(shù)據(jù)數(shù)據(jù)類型的同步,平臺可以將更新好的數(shù)據(jù)模型下發(fā)到網(wǎng)關(guān)中;三是網(wǎng)關(guān)設(shè)備心跳的管理模塊,定時發(fā)送網(wǎng)關(guān)和設(shè)備的心跳消息到機器服務(wù)器中,長時間斷開會被認(rèn)為處于關(guān)機狀態(tài),同時還需上傳狀態(tài)到數(shù)據(jù)庫中,完成網(wǎng)關(guān)和設(shè)備的心跳管理過程。

        2.3.1 設(shè)備認(rèn)證模塊

        設(shè)備首次接入時,需經(jīng)兩次認(rèn)證,完成系統(tǒng)對底層設(shè)備的權(quán)限認(rèn)證管理,其目的是確保設(shè)備接入合理及整個系統(tǒng)的安全,認(rèn)證流程如圖7所示。

        圖7 設(shè)備注冊認(rèn)證流程

        圖7中,底層傳感設(shè)備接入注冊時,網(wǎng)關(guān)端需發(fā)送認(rèn)證請求數(shù)據(jù)包到平臺端,平臺端通過建立端口監(jiān)聽來自網(wǎng)關(guān)端發(fā)送的數(shù)據(jù)。初次注冊認(rèn)證時,網(wǎng)關(guān)端發(fā)送不攜帶userKey的數(shù)據(jù)包到平臺端,平臺端接收數(shù)據(jù)包并進(jìn)行解析,判斷數(shù)據(jù)包中userKey是否為空,如果為空則生成認(rèn)證隨機數(shù),并存入Redis數(shù)據(jù)庫中,對網(wǎng)關(guān)userKey和生成的認(rèn)證隨機數(shù)通過MD5方式進(jìn)行加密,得到加密后的user-Key。反之,則根據(jù)網(wǎng)關(guān)ID從數(shù)據(jù)庫中讀取已經(jīng)生成好的認(rèn)證隨機數(shù),并按照上述加密方式完成加密流程。對上述加密內(nèi)容進(jìn)行解密工作,若解密后的userKey與二次認(rèn)證請求時的userKey一致,則說明認(rèn)證成功,返回認(rèn)證成功標(biāo)識和數(shù)據(jù)模型到網(wǎng)關(guān)端,否則返回認(rèn)證失敗,結(jié)束流程。

        2.3.2 數(shù)據(jù)上傳與下發(fā)模塊

        (1)設(shè)備數(shù)據(jù)上傳

        設(shè)備需與平臺建立連接來完成設(shè)備數(shù)據(jù)的實時傳輸,及設(shè)備認(rèn)證成功后平臺與設(shè)備數(shù)據(jù)模型的同步更新。底層設(shè)備數(shù)據(jù)經(jīng)由TCP協(xié)議傳送至網(wǎng)關(guān)端,實現(xiàn)數(shù)據(jù)模型的同步更新過程,每當(dāng)平臺注冊的虛擬數(shù)據(jù)模型發(fā)生更改時,對應(yīng)的物理數(shù)據(jù)模型也必須更改,完成設(shè)備實時數(shù)據(jù)與狀態(tài)更新數(shù)據(jù)與定義好數(shù)據(jù)模型的同步轉(zhuǎn)換。數(shù)據(jù)上傳流程如圖8所示。

        圖8 設(shè)備數(shù)據(jù)上傳流程

        圖8中,設(shè)備數(shù)據(jù)上傳前,首先完成流程初始化工作。網(wǎng)關(guān)客戶端監(jiān)聽來自底層設(shè)備上傳的數(shù)據(jù),并對數(shù)據(jù)類型做出判斷和處理。若監(jiān)聽到的為設(shè)備認(rèn)證消息,則通過設(shè)備認(rèn)證流程完成設(shè)備認(rèn)證,并返回平臺中的網(wǎng)關(guān)設(shè)備模型;若監(jiān)聽到的為設(shè)備數(shù)據(jù)更新消息,則需通過數(shù)據(jù)上傳流程同步更新數(shù)據(jù)至平臺端,完成底層設(shè)備數(shù)據(jù)的實時更新過程;若監(jiān)聽到的為設(shè)備心跳消息,需定時上傳網(wǎng)關(guān)和設(shè)備的心跳消息到機器服務(wù)器中,判斷二者是否關(guān)機,并上傳網(wǎng)關(guān)和設(shè)備狀態(tài)到平臺數(shù)據(jù)庫中。

        (2)平臺數(shù)據(jù)下發(fā)

        在平臺端構(gòu)造JSON格式設(shè)備控制指令,經(jīng)網(wǎng)關(guān)下發(fā)指令消息到具體設(shè)備,實現(xiàn)對底層設(shè)備的操作,操作流程如圖9所示。

        圖9 數(shù)據(jù)下發(fā)

        圖9中,當(dāng)平臺需要對設(shè)備進(jìn)行操作時,進(jìn)行初始化,對于平臺下發(fā)的JSON消息數(shù)據(jù)進(jìn)行監(jiān)聽,對于接收到的消息類型進(jìn)行判斷和對應(yīng)處理,并通過Socket.IO協(xié)議由平臺下發(fā)給網(wǎng)關(guān)。若監(jiān)聽到的為指令消息,則通過網(wǎng)關(guān)下發(fā)給具體的底層傳感設(shè)備,對其進(jìn)行具體的操作;若監(jiān)聽到的為模型消息,平臺端則會返回認(rèn)證完成時相應(yīng)的設(shè)備模型和網(wǎng)關(guān)模型到網(wǎng)關(guān)中,至此,平臺數(shù)據(jù)下發(fā)過程結(jié)束。

        2.3.3 心跳消息模塊

        系統(tǒng)建立連接后,設(shè)置網(wǎng)關(guān)心跳間隔為30 s,主要包含兩方面作用:一是驗證設(shè)備、網(wǎng)關(guān)與平臺之間的是否保持連接;二是確保網(wǎng)關(guān)保持在線,完成數(shù)據(jù)有序傳輸,心跳消息上傳如圖10所示。

        圖10 設(shè)備心跳上傳

        圖10中,設(shè)備需要定時通過TCP通信協(xié)議向網(wǎng)關(guān)發(fā)送相應(yīng)的心跳消息,用以確定設(shè)備是否與網(wǎng)關(guān)之間保持聯(lián)系,同時需要網(wǎng)關(guān)通過Socket.IO通信協(xié)議將設(shè)備的心跳消息定時發(fā)送給平臺,用來判斷設(shè)備與平臺之間的聯(lián)系,并將設(shè)備的實時狀態(tài)上傳到平臺數(shù)據(jù)庫中。

        2.4 網(wǎng)關(guān)平臺實時雙向通信系統(tǒng)模塊化實現(xiàn)

        采用Socket.IO雙向通信機制和Redis數(shù)據(jù)庫的數(shù)據(jù)緩存功能來完成物聯(lián)網(wǎng)網(wǎng)關(guān)實時雙向通信模塊化設(shè)計的實現(xiàn)。

        2.4.1 Socket.IO雙向通信機制

        Socket.IO實現(xiàn)了實時、雙向的通信機制,它解決了實時的通訊問題,并統(tǒng)一了服務(wù)器與客戶端的編程方式,啟動了socket以后,就像建立了一條客戶端與服務(wù)端的管道,兩邊可以互通有無[12]。其連接流程包括:服務(wù)器端啟動一個socket服務(wù),監(jiān)聽‘connection’事件;客戶端創(chuàng)建一個Websocket,并連接服務(wù)器端的socket,并綁定接收socket事件的方法;客戶成功接入后,服務(wù)器端socket就可以向客戶端發(fā)消息了。socket通訊可以簡單的理解為一個真正意義上的長鏈接,不主動斷開的話該通道一直存在,并且通道的兩端可以互相喊話。

        物聯(lián)網(wǎng)網(wǎng)關(guān)與云平臺之間采用基于Websocket協(xié)議的Socket.IO機制進(jìn)行雙向通信,其中Socket.IO消息機制如圖11所示。

        圖11 Socket.IO消息機制圖解

        圖11中,通過Socket.IO雙向通信消息機制實現(xiàn)物聯(lián)網(wǎng)網(wǎng)關(guān)與云平臺之間的數(shù)據(jù)傳輸。Socket.IO雙向通信流程為:網(wǎng)關(guān)服務(wù)器被創(chuàng)建成功,然后設(shè)置相應(yīng)的端口號和IP參數(shù),網(wǎng)關(guān)客戶端便根據(jù)訪問設(shè)置好的IP參數(shù)和端口號來完成與服務(wù)器的連接;當(dāng)需要對底層傳感設(shè)備進(jìn)行認(rèn)證、數(shù)據(jù)更新以及網(wǎng)關(guān)/設(shè)備定時心跳上傳時,通過圖11的Socket.IO消息機制,利用socket.meit(“消息名稱”,json格式消息內(nèi)容)方式將數(shù)據(jù)傳輸?shù)劫Y源平臺,同時也可實現(xiàn)服務(wù)器將數(shù)據(jù)推送給客戶端,并且通過socket.on(“消息名稱”,json格式消息內(nèi)容)方式來監(jiān)聽數(shù)據(jù)是否成功被接收,來完成物聯(lián)網(wǎng)網(wǎng)關(guān)與資源平臺的雙向通信。

        2.4.2 Redis數(shù)據(jù)庫

        Redis是基于key-value的一種NoSql數(shù)據(jù)庫,廣泛應(yīng)用于分布式的應(yīng)用中,一般用于放置緩存數(shù)據(jù)[13]。通過對key做一致性哈希,實現(xiàn)key對應(yīng)Redis結(jié)點的分布,Redis支持異步將內(nèi)存中的數(shù)據(jù)寫到硬盤上,同時不影響繼續(xù)服務(wù)。為了確保一定的運行效率,它的數(shù)據(jù)暫存在內(nèi)存中,因此支持對復(fù)雜數(shù)據(jù)結(jié)構(gòu)的高速操作。在云平臺中Socket.IO服務(wù)器跟數(shù)據(jù)庫Redis相連,用來完成對于設(shè)備數(shù)據(jù)的緩存存儲,當(dāng)數(shù)據(jù)類型比較多、數(shù)據(jù)量較大或者出現(xiàn)高并發(fā)情況時,將數(shù)據(jù)暫存到Redis緩存隊列中,提高系統(tǒng)的效率,減少內(nèi)存占用。緩存的數(shù)據(jù)有首次認(rèn)證時服務(wù)端產(chǎn)生的認(rèn)證隨機數(shù)、每個成功連接且在線的網(wǎng)關(guān)Socket.ID號、網(wǎng)關(guān)/設(shè)備狀態(tài)和網(wǎng)關(guān)/設(shè)備心跳時的超時時間。

        3 測 試

        對整個系統(tǒng)完成功能測試和性能測試來驗證系統(tǒng)的可行性,其中硬件設(shè)備包括溫濕度傳感器/攝像機(DM365)、曙光Sugon服務(wù)器和PC機一臺。性能測試采用Jmeter軟件測試整個雙向通信系統(tǒng)相關(guān)參數(shù)等。

        3.1 功能測試

        設(shè)計相關(guān)測試用例對物聯(lián)網(wǎng)網(wǎng)關(guān)通信各個模塊進(jìn)行具體測試,該測試的具體功能有:設(shè)備認(rèn)證、設(shè)備數(shù)據(jù)上傳和狀態(tài)更新、平臺指令數(shù)據(jù)下發(fā)和平臺模型數(shù)據(jù)下發(fā)、網(wǎng)關(guān)/設(shè)備心跳。

        (1)設(shè)備認(rèn)證

        當(dāng)有底層設(shè)備需要接入物聯(lián)網(wǎng)平臺時,需要對于底層設(shè)備進(jìn)行認(rèn)證,認(rèn)證成功后平臺返回網(wǎng)關(guān)/設(shè)備數(shù)據(jù)模型。設(shè)備認(rèn)證服務(wù)器端數(shù)據(jù)和客戶端數(shù)據(jù)圖傳輸圖如圖12、圖13 所示。

        圖12 設(shè)備認(rèn)證服務(wù)器端

        圖13 設(shè)備認(rèn)證客戶端

        (2)圖片數(shù)據(jù)上傳

        當(dāng)?shù)讓釉O(shè)備為攝像機時,需要將采集到的圖片發(fā)送至平臺,通過前端界面顯示出來,進(jìn)行系統(tǒng)的功能測試。系統(tǒng)功能測試如圖14所示。

        圖14 功能測試

        3.2 性能測試

        為了保證系統(tǒng)能夠有效運行,對系統(tǒng)進(jìn)行相關(guān)的性能測試,驗證系統(tǒng)的可行性,見表1。

        表1中,選取3000個樣本數(shù),在HTTP協(xié)議和Socket.IO 協(xié)議兩種方式下,利用Jmeter軟件進(jìn)行性能測試。整個系統(tǒng)的性能測試報告中主要由采取的通信協(xié)議、樣本的個數(shù)、平均回應(yīng)時長、錯誤的概率、丟包的概率以及傳輸速率幾個方面組成。由實驗結(jié)果可知,對比之下,采

        表1 聚合報告對比

        取Socket.IO協(xié)議時數(shù)據(jù)傳輸效率有明顯的提高,丟包率有了明顯的下降,整個系統(tǒng)的工作效率有了較大的提升。由測試結(jié)果可知,采用Socket.IO雙向通訊協(xié)議作為物聯(lián)網(wǎng)網(wǎng)關(guān)與平臺之間的雙向通信協(xié)議,不僅能夠?qū)崿F(xiàn)網(wǎng)關(guān)和平臺之間的數(shù)據(jù)實時傳輸,還提高了整個系統(tǒng)的運行速率,保證了系統(tǒng)的安全性和穩(wěn)定性。

        4 結(jié)束語

        基于Node.JS運行平臺,通信部分采用Socket.IO通信協(xié)議,系統(tǒng)數(shù)據(jù)庫用Redis來完成對于底層傳感設(shè)備數(shù)據(jù)的緩存存取的功能,完成了網(wǎng)關(guān)與平臺之間的實時雙向通信系統(tǒng)的模塊化設(shè)計與實現(xiàn)。首先,通過對于物聯(lián)網(wǎng)系統(tǒng)、云平臺以及網(wǎng)關(guān)架構(gòu)的設(shè)計完成物聯(lián)網(wǎng)通信系統(tǒng)的框架實現(xiàn)。其次,根據(jù)不同的功能需求,對于通信系統(tǒng)完成不同模塊實現(xiàn)不同功能的設(shè)計,利用Socket.IO雙向通信協(xié)議,實現(xiàn)物聯(lián)網(wǎng)網(wǎng)關(guān)與云平臺之間關(guān)于底層設(shè)備認(rèn)證、底層設(shè)備數(shù)據(jù)與心跳數(shù)據(jù)的實時傳輸過程。最后,通過進(jìn)行功能和性能測試來完成對于系統(tǒng)的驗收工作。通過上述的測試結(jié)果可知,基于Socket.IO通信協(xié)議的網(wǎng)關(guān)與平臺的雙向通信系統(tǒng)相比于傳統(tǒng)協(xié)議而言,可以更有效地提高系統(tǒng)的工作效率以及系統(tǒng)運行時的穩(wěn)定性。

        猜你喜歡
        設(shè)備系統(tǒng)
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無人機系統(tǒng)
        ZC系列無人機遙感系統(tǒng)
        北京測繪(2020年12期)2020-12-29 01:33:58
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        基于VB6.0+Access2010開發(fā)的設(shè)備管理信息系統(tǒng)
        基于MPU6050簡單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        500kV輸變電設(shè)備運行維護(hù)探討
        狠狠躁夜夜躁无码中文字幕| 久久亚洲精品中文字幕| 亚洲欧美乱日韩乱国产| 大胆欧美熟妇xxbbwwbw高潮了 | 亚洲丰满熟女乱一区二区三区| 少妇爽到爆视频网站免费| 久久成人精品国产免费网站| 亚洲色一区二区三区四区| 18女下面流水不遮图| 天天躁日日操狠狠操欧美老妇| 99久久精品国产一区色| 国产自拍高清在线观看| 亚洲aⅴ在线无码播放毛片一线天 中国国语毛片免费观看视频 | 97人人模人人爽人人喊网| 国产探花在线精品一区二区| 在线a免费观看| 国产人妖在线免费观看| 日韩精品在线视频一二三| 熟妇激情内射com| 亚洲色婷婷免费视频高清在线观看| 色婷婷色99国产综合精品| 亚洲女人毛茸茸的视频| 中文人妻熟女乱又乱精品| 亚洲粉嫩高潮的18p| 囯产精品无码一区二区三区| 一区二区三区夜夜久久| 亚洲国产精品成人久久久| 日产精品久久久久久久性色| 国产高清在线91福利| 亚洲av午夜福利精品一区不卡| 无遮挡18禁啪啪羞羞漫画| 亚洲视频一区| 久久久www成人免费无遮挡大片| 精品综合久久88少妇激情| 国产freesexvideos中国麻豆| 久久免费的精品国产v∧| 国产真实伦视频在线视频| 婷婷久久av综合一区二区三区| 欧美成人午夜免费影院手机在线看 | 日韩中文字幕一区在线| 2018天天躁夜夜躁狠狠躁|