傅啟明 高沈鋼
【摘 要】隨著物聯(lián)網(wǎng)技術(shù)的廣泛應(yīng)用,物聯(lián)網(wǎng)設(shè)備與服務(wù)器通信的模塊越來越多,通信報文種類也逐漸增多,導(dǎo)致編解碼工作量不斷增加。文章提出一種適用于物聯(lián)網(wǎng)通信的通用網(wǎng)絡(luò)報文編解碼組件設(shè)計方案,通過配置報文的識別碼和格式定義,無需針對每種報文編寫不同的編解碼代碼即可完成報文的編碼和解碼操作,提高了生產(chǎn)效率。
【關(guān)鍵詞】物聯(lián)網(wǎng);報文;編解碼
【中圖分類號】TP391.9 【文獻(xiàn)標(biāo)識碼】A 【文章編號】1674-0688(2017)05-0030-03
0 引言
物聯(lián)網(wǎng)(IoT)是物與物相連(通過定位、識別、感應(yīng)和監(jiān)控等技術(shù)將設(shè)備連接管理)的互聯(lián)網(wǎng),物聯(lián)網(wǎng)通信的報文即物聯(lián)網(wǎng)設(shè)備與服務(wù)器通信的數(shù)據(jù)單元。在物聯(lián)網(wǎng)的通信模塊中,將網(wǎng)絡(luò)傳輸數(shù)據(jù)轉(zhuǎn)化為物聯(lián)設(shè)備的內(nèi)存數(shù)據(jù)為解碼,反之則為編碼。一般的做法是針對不同的報文,編寫不同的報文編解碼。在物聯(lián)網(wǎng)設(shè)備報文種類不多的情況下,報文編解碼的開發(fā)工作量是可控的。但隨著物聯(lián)網(wǎng)技術(shù)應(yīng)用的廣泛深入與拓展,報文編解碼開發(fā)的工作量會越來越大且難以維護(hù)。因此,從開發(fā)和運維中節(jié)約成本及減少工作的復(fù)雜度方面考慮,迫切需要一套通用靈活的報文編解碼設(shè)計方案。
1 總體框架
報文編解碼框架涉及2個數(shù)據(jù)對象:網(wǎng)絡(luò)報文數(shù)據(jù)和的內(nèi)存報文對象。其中,網(wǎng)絡(luò)報文數(shù)據(jù)為物聯(lián)網(wǎng)絡(luò)中傳輸?shù)奈唇馕龆M(jìn)制數(shù)據(jù)流,內(nèi)存報文數(shù)據(jù)為解析完成后的物聯(lián)設(shè)備中有明確業(yè)務(wù)意義的數(shù)據(jù)對象。編解碼框架主要有2個功能:將內(nèi)存報文對象編碼為網(wǎng)絡(luò)報文數(shù)據(jù)、將網(wǎng)絡(luò)報文數(shù)據(jù)解碼為內(nèi)存報文對象。
分析物聯(lián)網(wǎng)設(shè)備與服務(wù)器的通信報文,可以發(fā)現(xiàn)如下特性:報文中一般都存在不可分割的最小數(shù)據(jù)單元,這些數(shù)據(jù)單元一般都對應(yīng)一個特定的業(yè)務(wù)屬性,整個報文數(shù)據(jù)都是通過這些數(shù)據(jù)單元組織起來的,同時對于每種報文都有一個區(qū)分與其他報文的特征碼。針對這些特性,可以用有序Map的數(shù)據(jù)結(jié)構(gòu)來設(shè)計報文的內(nèi)存對象。組件框架設(shè)計如圖1所示。
組件主要完成網(wǎng)絡(luò)報文數(shù)據(jù)和內(nèi)存報文對象的互相轉(zhuǎn)換。組件的主體結(jié)構(gòu)由報文配置和編解碼功能組成。存在的配置數(shù)據(jù)分為2類:報文特征碼和格式定義。配置數(shù)據(jù)為本組件對開發(fā)人員開放的部分,通過配置不同的數(shù)據(jù)以解析不同的報文。
在框架中,報文編解碼組件有3個主體功能模塊:報文識別、報文反序列化、報文序列化。
2 配置與模塊設(shè)計
2.1 報文配置數(shù)據(jù)設(shè)計
特征碼(MsgSignature):描述了報文區(qū)別于其他報文的特征,通過對各種報文的分析,設(shè)計如下幾種內(nèi)置特征碼便于開發(fā)。例如,以固定內(nèi)容結(jié)尾的特征碼(EndTokenSignature)、在固定位置存放固定內(nèi)容的特征碼(FixedPosContentSignature)。
格式定義(MsgFomat):報文中的數(shù)據(jù)一般都是一塊接著一塊存放,用以描述相關(guān)的業(yè)務(wù)信息。此處的格式定義是一個一個數(shù)據(jù)單元描述的匯總。每個數(shù)據(jù)單元描述了最基本的數(shù)據(jù)定義,定義中包括了數(shù)據(jù)類型和數(shù)據(jù)的轉(zhuǎn)換邏輯。通過對大量報文的分析,我們初始化內(nèi)置如下數(shù)據(jù)單元定義(見表1)。
2.2 報文識別模塊設(shè)計
報文識別(MsgIdentification)模塊通過對報文特征碼的提取來識別報文類別。接收一段報文時,首先通過調(diào)用報文識別模塊進(jìn)行識別。識別模塊的流程設(shè)計如圖2所示。
2.3 反序列化模塊設(shè)計
當(dāng)判斷出具體類型的報文后,即進(jìn)入報文反序列化(Msg Deserialization)模塊。報文反序列化模塊將網(wǎng)絡(luò)二進(jìn)制數(shù)據(jù)對照報文的格式定義,逐塊解析直到報文格式完全分析完,最終生成有業(yè)務(wù)意義的內(nèi)存數(shù)據(jù)對象。反序列化模塊的流程設(shè)計如圖3所示。
2.4 序列化模塊設(shè)計
相較于之前的模塊,報文序列化模塊(MsgSerialization)實現(xiàn)更簡單。它將內(nèi)存中有業(yè)務(wù)意義的數(shù)據(jù)對象轉(zhuǎn)化為二進(jìn)制數(shù)據(jù)流的網(wǎng)絡(luò)對象。只需循環(huán)遍歷報文定義中的每個數(shù)據(jù)單元,把對應(yīng)的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制流即可。序列化模塊的流程如圖4所示。
3 結(jié)語
本文設(shè)計的報文編解碼組件主要面向開發(fā)人員。開發(fā)人員通過分析報文特征和格式,然后用配置數(shù)據(jù)來描述報文,以完成報文的編解碼操作。從開發(fā)的角度來看,由于代碼只有通用的編解碼部分,并未針對某種特定的報文,因此開發(fā)的工作量減少了;從運維角度來看,所有的報文特征碼和格式統(tǒng)一配置,使得配置數(shù)據(jù)與代碼剝離,因此更便于分析和維護(hù)了。
參 考 文 獻(xiàn)
[1]王保云.物聯(lián)網(wǎng)技術(shù)研究綜述[J].電子測量與儀器學(xué)報,2009,23(12):1-7.
[2]羅捷,潘江峰,耿修堂.某協(xié)議報文編解碼模塊的設(shè)計與實現(xiàn)[J].火炮發(fā)射與控制學(xué)報,2013(3):37-40.
[3]劉相,劉澤平.可變報文格式編解碼模塊設(shè)計與實現(xiàn)[J].電訊技術(shù),
2016,56(11):1260-1266.
[責(zé)任編輯:鐘聲賢]