,一方開(kāi)啟KeepAlive功能后,就會(huì)自動(dòng)在規(guī)定時(shí)間內(nèi)向?qū)Ψ桨l(fā)送心跳包,而另一方在收到心跳包后就會(huì)自動(dòng)回復(fù),以告訴對(duì)方我仍然在線。
[0025]利用TCP本身支持的Ke印Alive功能實(shí)現(xiàn)斷線檢測(cè),比用戶(hù)自己在應(yīng)用層實(shí)現(xiàn)檢測(cè)更方便有效,而且探測(cè)時(shí)帶寬消耗很小。在沒(méi)有數(shù)據(jù)傳輸時(shí)依賴(lài)KeepAlive確保斷線檢測(cè),在傳輸數(shù)據(jù)時(shí)TCP會(huì)通過(guò)超時(shí)判斷是否斷線。
[0026]Socket封裝:組件完全封裝了所有的底層Socket通信,上層應(yīng)用看不到任何通信細(xì)節(jié),不必也不能干預(yù)任何通信操作。另外,組件在IServerSocketListener通知接口的所有方法中都有一個(gè)Connect1n ID參數(shù)及一個(gè)ServerID參數(shù),這兩個(gè)參數(shù)作為連接標(biāo)識(shí)提供給上層應(yīng)用識(shí)別不同的連接。
[0027]內(nèi)存優(yōu)化:
[0028]緩存池:在通信的過(guò)程中,通常需要頻繁的申請(qǐng)和釋放內(nèi)存緩沖區(qū)(TBufferObj)和Socket相關(guān)的結(jié)構(gòu)體(TSocketObj),這會(huì)大大影響組件的性能,因此,組件為T(mén)BufferObj和TSocketObi建立了動(dòng)態(tài)緩存池,只有當(dāng)緩存池中沒(méi)有可用對(duì)象時(shí)才創(chuàng)建新對(duì)象,而當(dāng)緩存對(duì)象過(guò)多時(shí)則會(huì)壓縮緩存池。
[0029]私有堆(Private Heap):在操作系統(tǒng)中,new / malloc等操作是串行化的,雖然一般的應(yīng)用程序不用太在乎這個(gè)問(wèn)題,但是在一個(gè)高并發(fā)的服務(wù)器中則是個(gè)不可忽略的問(wèn)題,另外TBufferObj和TSocketObj均為大小固定的結(jié)構(gòu)體,因此非常適合在私有堆中分配內(nèi)存,避免與new / malloc競(jìng)爭(zhēng)同時(shí)又減少內(nèi)存空洞。
[0030]靈活性改進(jìn):該通信適配模塊可以根據(jù)實(shí)際的使用環(huán)境要求設(shè)置工作線程的數(shù)量、TBufferObj和TSocketObj緩存池的大小、TBufferObj緩沖區(qū)的大小、Socket監(jiān)聽(tīng)隊(duì)列的大小、AccepEx派發(fā)的數(shù)目以及心跳檢查的間隔等。
[0031]數(shù)據(jù)標(biāo)準(zhǔn)化模塊:
[0032]主要用于對(duì)獲取的數(shù)據(jù)進(jìn)行過(guò)濾、清洗、轉(zhuǎn)換,最終標(biāo)準(zhǔn)化為系統(tǒng)通用的數(shù)據(jù)格式,供外部系統(tǒng)使用。根據(jù)實(shí)際應(yīng)用中,數(shù)據(jù)標(biāo)準(zhǔn)化模塊主要處理登陸、登陸返回、心跳、數(shù)據(jù)請(qǐng)求、業(yè)務(wù)數(shù)據(jù)等數(shù)據(jù)類(lèi)型,二進(jìn)制、文本等數(shù)據(jù)格式,但傳輸?shù)母兄獢?shù)據(jù)各異,如報(bào)警、定位、人像等。為更廣泛地兼容各類(lèi)異構(gòu)感知數(shù)據(jù),數(shù)據(jù)標(biāo)準(zhǔn)化模塊分為兩個(gè)部分:數(shù)據(jù)標(biāo)準(zhǔn)化配置工具和數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序。
[0033]數(shù)據(jù)標(biāo)準(zhǔn)化配置工具,主要負(fù)責(zé)為用戶(hù)提供界面化操作,配置與前端系統(tǒng)、外部系統(tǒng)之間交換的數(shù)據(jù)類(lèi)型、數(shù)據(jù)格式以及數(shù)據(jù)標(biāo)準(zhǔn)化的規(guī)則,生成配置文件,以供數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序初始化讀取。
[0034]數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序的任務(wù)有兩個(gè):1、判斷數(shù)據(jù)類(lèi)型(判斷輸入的數(shù)據(jù)是登陸、登陸返回、心跳、數(shù)據(jù)請(qǐng)求、業(yè)務(wù)數(shù)據(jù)、錯(cuò)誤數(shù)據(jù)中的那一種);2、標(biāo)準(zhǔn)化數(shù)據(jù)。
[0035]數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序?qū)斎氲臄?shù)據(jù)依次進(jìn)行職責(zé)鏈模式的過(guò)濾,根據(jù)配置文件的配置,判斷該數(shù)據(jù)是那種數(shù)據(jù)類(lèi)型,并根據(jù)數(shù)據(jù)類(lèi)型對(duì)數(shù)據(jù)進(jìn)行分別處理。對(duì)于不需要標(biāo)準(zhǔn)化的數(shù)據(jù)類(lèi)型(例如,登錄)直接返回類(lèi)型和數(shù)據(jù)。對(duì)于需要標(biāo)準(zhǔn)化的數(shù)據(jù)類(lèi)型(例如,業(yè)務(wù)數(shù)據(jù)),將輸入的一串?dāng)?shù)據(jù)按配置文件的字段分割開(kāi),以鏈表進(jìn)行串聯(lián),并依此針對(duì)每個(gè)字段進(jìn)行處理。對(duì)處理過(guò)的每個(gè)字段也以鏈表的方式進(jìn)行串聯(lián),最后將鏈表中的數(shù)據(jù)組合成一組數(shù)據(jù),即輸出數(shù)據(jù)和數(shù)據(jù)類(lèi)型一起返回給通信適配模塊。
[0036]在對(duì)每個(gè)字段的轉(zhuǎn)換處理中,將轉(zhuǎn)換規(guī)則設(shè)計(jì)成一個(gè)hashmap, hashmap的鍵是一串字符,hashmap的值是函數(shù)指針,不同的鍵對(duì)應(yīng)不同的函數(shù)指針,每個(gè)函數(shù)指針都指向一個(gè)處理字段轉(zhuǎn)換的函數(shù)。因此,在對(duì)鏈表中的一個(gè)字段進(jìn)行處理時(shí),根據(jù)配置文件中的鍵,找到hashmap中對(duì)應(yīng)的處理這個(gè)字段的函數(shù),調(diào)用該函數(shù)對(duì)字段進(jìn)行處理,將處理后的字段插入到新生成的另一個(gè)鏈表中。使用hashmap和函數(shù)指針處理字段轉(zhuǎn)換,可以提高數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序的數(shù)據(jù)處理效率和準(zhǔn)確性,今后如果擴(kuò)展數(shù)據(jù)轉(zhuǎn)換規(guī)則只需添加處理函數(shù),并插入到hashmap中即可,并不需要修改程序的其他代碼。
[0037]該方案應(yīng)用在windows操作系統(tǒng)中,支持通過(guò)TCP、UDP協(xié)議傳輸數(shù)據(jù),支持二進(jìn)制、文本的數(shù)據(jù)格式。在使用過(guò)程中,首先要通過(guò)配置工具,配置數(shù)據(jù)源和訂閱者的相關(guān)信息,包括IP地址、端口號(hào)、連接類(lèi)型等相關(guān)信息。其次配置數(shù)據(jù)格式及轉(zhuǎn)換規(guī)則,包括數(shù)據(jù)格式(二進(jìn)制、文本),數(shù)據(jù)包的類(lèi)型(登陸、登陸返回、心跳、數(shù)據(jù)請(qǐng)求、業(yè)務(wù)數(shù)據(jù)),數(shù)據(jù)的組成(字段名稱(chēng)、字節(jié)順序、字段類(lèi)型、字段長(zhǎng)度、字段初始值等)。最后,將生成的配置文件部署到和程序同一級(jí)的文件中,啟動(dòng)服務(wù)程序,服務(wù)程序就會(huì)自動(dòng)連接前端系統(tǒng),接收感知數(shù)據(jù),并進(jìn)行過(guò)濾、轉(zhuǎn)換等處理??蓪?shù)據(jù)轉(zhuǎn)發(fā)給經(jīng)過(guò)認(rèn)證的客戶(hù)端,或者轉(zhuǎn)發(fā)給存儲(chǔ)系統(tǒng)進(jìn)行數(shù)據(jù)存儲(chǔ)。
【主權(quán)項(xiàng)】
1.一種海量物聯(lián)網(wǎng)感知數(shù)據(jù)的接入及標(biāo)準(zhǔn)化方法,其特征在于:在應(yīng)用系統(tǒng)中設(shè)置兩個(gè)模塊,包括通信適配模塊和數(shù)據(jù)標(biāo)準(zhǔn)化模塊,通信適配模塊與發(fā)送感知數(shù)據(jù)的前端系統(tǒng)建立連接,接收數(shù)據(jù),將接收到的數(shù)據(jù)交予數(shù)據(jù)標(biāo)準(zhǔn)化模塊進(jìn)行處理,數(shù)據(jù)標(biāo)準(zhǔn)化模塊將處理過(guò)的數(shù)據(jù)返回給通信適配模塊,由通信模塊將標(biāo)準(zhǔn)化數(shù)據(jù)發(fā)送給需要的外部系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于:所述通信適配模塊主要包括通信適配配置工具和通信適配服務(wù)程序兩個(gè)部分,其中通信適配配置工具主要負(fù)責(zé)為用戶(hù)提供界面化操作,配置與前端系統(tǒng)、外部系統(tǒng)建立鏈接的相關(guān)信息,生成配置文件,以供通信適配服務(wù)程序初始化讀取,通信適配服務(wù)程序采用微軟提供的完成端口通信模型,并在其上進(jìn)行滿(mǎn)足實(shí)際需要的改進(jìn)與封裝;所述數(shù)據(jù)標(biāo)準(zhǔn)化模塊分為數(shù)據(jù)標(biāo)準(zhǔn)化配置工具和數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序兩個(gè)部分,其中數(shù)據(jù)標(biāo)準(zhǔn)化配置工具主要負(fù)責(zé)為用戶(hù)提供界面化操作,配置與前端系統(tǒng)、外部系統(tǒng)之間交換的數(shù)據(jù)類(lèi)型、數(shù)據(jù)格式以及數(shù)據(jù)標(biāo)準(zhǔn)化的規(guī)則,生成配置文件,以供數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序初始化讀取,數(shù)據(jù)標(biāo)準(zhǔn)化服務(wù)程序負(fù)責(zé)判斷數(shù)據(jù)類(lèi)型和對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。
【專(zhuān)利摘要】本發(fā)明涉及一種海量物聯(lián)網(wǎng)感知數(shù)據(jù)的接入及標(biāo)準(zhǔn)化方法,在應(yīng)用系統(tǒng)中設(shè)置兩個(gè)模塊,包括通信適配模塊和數(shù)據(jù)標(biāo)準(zhǔn)化模塊,通信適配模塊與發(fā)送感知數(shù)據(jù)的前端系統(tǒng)建立連接,接收數(shù)據(jù),將接收到的數(shù)據(jù)交予數(shù)據(jù)標(biāo)準(zhǔn)化模塊進(jìn)行處理,數(shù)據(jù)標(biāo)準(zhǔn)化模塊將處理過(guò)的數(shù)據(jù)返回給通信適配模塊,由通信模塊將標(biāo)準(zhǔn)化數(shù)據(jù)發(fā)送給需要的外部系統(tǒng)。
【IPC分類(lèi)】G06F17-30
【公開(kāi)號(hào)】CN104636331
【申請(qǐng)?zhí)枴緾N201310544356
【發(fā)明人】藍(lán)飛翔, 陳學(xué)釗, 袁芳, 馬思琦
【申請(qǐng)人】北京航天長(zhǎng)峰科技工業(yè)集團(tuán)有限公司
【公開(kāi)日】2015年5月20日
【申請(qǐng)日】2013年11月6日