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