本申請實施例涉及計算機(jī)技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)傳遞方法。本申請實施例同時還涉及一種數(shù)據(jù)傳遞設(shè)備。
背景技術(shù):
在現(xiàn)有技術(shù)中,需要將采集到的數(shù)據(jù),回傳給監(jiān)控設(shè)備;而在具體的回傳過程中,需要在對系統(tǒng)資源的消耗要盡可能的小,以便減小對采集的性能監(jiān)控數(shù)據(jù)準(zhǔn)確性的影響。
而在目前的回傳方案中,有以下幾種方式:
方式一、單線程回傳,也即在采集得到數(shù)據(jù)后,立馬將數(shù)據(jù)回傳給監(jiān)控設(shè)備,而不對數(shù)據(jù)進(jìn)行保存;這種方式會頻繁調(diào)用回傳程序,產(chǎn)生系統(tǒng)開銷,從而影響數(shù)據(jù)準(zhǔn)確性;使得無法保證數(shù)據(jù)的完整性,且一旦一次回傳失敗后,該數(shù)據(jù)就會丟失,無法重試。
方式二、通過日志文件方式回傳,也即先將采集到的監(jiān)控數(shù)據(jù),打印到一個日志文件中,日志文件保存在用戶的機(jī)器上;同時再啟動一個進(jìn)程,用以異步地逐行掃描該日志文件,每讀取一行日志文件數(shù)據(jù),就將讀取到的日志文件數(shù)據(jù)回傳給監(jiān)控設(shè)備;在這種方式中,會造成頻繁的IO(Input/Output,輸入/輸出)操作,會占用大量的系統(tǒng)IO資源,同時在IO操作過程中,也會對CPU(Central Processing Unit,中央處理器)等指標(biāo)產(chǎn)生影響,同樣會造成數(shù)據(jù)的不準(zhǔn)確。
方式三、通過數(shù)組或鏈表的方式回傳,也即將采集到的數(shù)據(jù)先存放在一個數(shù)組或鏈表中,同時再啟動一個進(jìn)程B,定時從數(shù)組或鏈表中獲取數(shù)據(jù),并將獲取到的數(shù)據(jù)回傳給監(jiān)控設(shè)備;但是數(shù)組和鏈表線程不安全,在多線程 的情況下,容易出現(xiàn)問題;其次,數(shù)組和鏈表在取出數(shù)據(jù)后,需要將數(shù)組或鏈表中的這個數(shù)據(jù)刪除,刪除過程需要對整個數(shù)組或鏈表的數(shù)據(jù)進(jìn)行移動,數(shù)據(jù)量大的話,會造成系統(tǒng)開銷,影響采集數(shù)據(jù)的準(zhǔn)確性;而頻繁的節(jié)點操作,會引起頻繁的申請和釋放內(nèi)存操作,造成系統(tǒng)開銷;且如果消費數(shù)據(jù)的進(jìn)程出現(xiàn)問題,導(dǎo)致數(shù)據(jù)無法及時被使用掉,會導(dǎo)致數(shù)組或鏈表中的數(shù)據(jù)堆積,時間長了容易引起內(nèi)存溢出的問題。
可見現(xiàn)有的回傳方式都無法滿足在回傳時對系統(tǒng)資源的消耗要盡可能的小,以及減小對采集的性能監(jiān)控數(shù)據(jù)準(zhǔn)確性的影響的需要。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中無法滿足在回傳時對系統(tǒng)資源的消耗要盡可能小的要求,以及面臨無法減小對采集的性能監(jiān)控數(shù)據(jù)準(zhǔn)確性的影響的缺陷,本申請?zhí)岢隽艘环N數(shù)據(jù)傳遞方法,包括:
將采集到的數(shù)據(jù)存入循環(huán)數(shù)組;
從所述循環(huán)數(shù)組中提取數(shù)據(jù);
將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備。
可選的,所述循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū)域之間存在先后順序關(guān)系;
所述將采集到的數(shù)據(jù)存入循環(huán)數(shù)組,具體包括:
將采集到的數(shù)據(jù)按照所述區(qū)域的先后順序依次存儲在所述循環(huán)數(shù)組的區(qū)域中。
可選的,所述循環(huán)數(shù)組中包括頭指針和尾指針,所述頭指針和所述尾指針分別對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號與所述頭指針的值相同;所述尾指針對應(yīng)的區(qū)域的編號和所述尾指針的值相同;
所述將采集到的數(shù)據(jù)按照所述區(qū)域的先后順序依次存儲在所述循環(huán)數(shù)組的區(qū)域中,具體包括:
將采集到的數(shù)據(jù)存入所述循環(huán)數(shù)組中所述尾指針對應(yīng)的區(qū)域;
判斷所述循環(huán)數(shù)組的各區(qū)域是否已滿,且頭指針與尾指針是否對應(yīng)于同一個區(qū)域;
若判斷結(jié)果都為是,則將頭指針的值預(yù)加1;
若判斷結(jié)果為否,則將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值加1;
將尾指針的值預(yù)加1;
判斷當(dāng)前的頭指針或尾指針?biāo)鶎?yīng)的區(qū)域是否溢出所述循環(huán)數(shù)組;
若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述頭指針的值,并將所述頭指針的值歸零;若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則保留預(yù)加1后的頭指針的值為所述頭指針的值;
若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述尾指針的值,并將所述尾指針的值歸零;若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則保留預(yù)加1后的尾指針的值為尾指針的值。
可選的,所述循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū)域之間存在先后順序關(guān)系;
所述從所述循環(huán)數(shù)組中提取數(shù)據(jù),具體包括:
按照所述先后順序關(guān)系依次從所述循環(huán)數(shù)組的區(qū)域中提取數(shù)據(jù)。
可選的,所述循環(huán)數(shù)組中包括頭指針,所述頭指針對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號所述頭指針的值相同;
所述按照所述先后順序關(guān)系依次從所述循環(huán)數(shù)組的區(qū)域中提取數(shù)據(jù),具體包括;
判斷所述循環(huán)數(shù)組中是否存儲有數(shù)據(jù);
若判斷結(jié)果為是,則從所述循環(huán)數(shù)組中所述頭指針?biāo)鶎?yīng)的區(qū)域提取數(shù)據(jù);
將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值減1;
將頭指針的值預(yù)加1;
判斷當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域是否溢出了所述循環(huán)數(shù)組;
若判斷結(jié)果為是,則取消預(yù)加1后的頭指針的值,并將頭指針的值歸零;
若判斷結(jié)果為否,則保留預(yù)加1后的頭指針的值為頭指針的值。
可選的,所述將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備,具體包括:
將提取的數(shù)據(jù)通過HTTP的方式回傳給數(shù)據(jù)接收設(shè)備。
可選的,在將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備之后,還包括:
將所述數(shù)據(jù)接收設(shè)備接收到的數(shù)據(jù)存入數(shù)據(jù)庫中。
本申請還提出了一種數(shù)據(jù)傳遞設(shè)備,包括:
存入模塊,用于將采集到的數(shù)據(jù)存入循環(huán)數(shù)組;
提取模塊,用于從所述循環(huán)數(shù)組中提取數(shù)據(jù);
回傳模塊,用于將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備。
可選的,所述循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū)域之間存在先后順序關(guān)系;
所述存入模塊,具體用于:
將采集到的數(shù)據(jù)按照所述區(qū)域的先后順序依次存儲在所述循環(huán)數(shù)組的區(qū)域中。
可選的,所述循環(huán)數(shù)組中包括頭指針和尾指針,所述頭指針和所述尾指針分別對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號與所述頭指針的值相同;所述尾指針對應(yīng)的區(qū)域的編號和所述尾指針的值相同;
所述存入模塊,具體用于:
將采集到的數(shù)據(jù)存入所述循環(huán)數(shù)組中所述尾指針對應(yīng)的區(qū)域;
判斷所述循環(huán)數(shù)組的各區(qū)域是否已滿,且頭指針與尾指針是否對應(yīng)于同一個區(qū)域;
若判斷結(jié)果都為是,則將頭指針的值預(yù)加1;
若判斷結(jié)果為否,則將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值加1;
將尾指針的值預(yù)加1;
判斷當(dāng)前的頭指針或尾指針?biāo)鶎?yīng)的區(qū)域是否溢出所述循環(huán)數(shù)組;
若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述頭指針的值,并將所述頭指針的值歸零;若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則將預(yù)加1后的頭指針的值設(shè)置為所述頭指針的值;
若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述尾指針的值,并將所述尾指針的值歸零;若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則將預(yù)加1后的尾指針的值設(shè)置為尾指針的值。
可選的,所述循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū)域之間存在先后順序關(guān)系;
所述提取模塊,具體用于:
按照所述先后順序關(guān)系依次從所述循環(huán)數(shù)組的區(qū)域中提取數(shù)據(jù)。
可選的,所述循環(huán)數(shù)組中包括頭指針,所述頭指針對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號所述頭指針的值相同;
所述提取模塊,具體用于;
判斷所述循環(huán)數(shù)組中是否存儲有數(shù)據(jù);
若判斷結(jié)果為是,則從所述循環(huán)數(shù)組中所述頭指針?biāo)鶎?yīng)的區(qū)域提取數(shù)據(jù);
將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值減1;
將頭指針的值預(yù)加1;
判斷當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域是否溢出了所述循環(huán)數(shù)組;
若判斷結(jié)果為是,則取消預(yù)加1后的頭指針的值,并將頭指針的值歸零。
可選的,所述回傳模塊,具體用于:
將提取的數(shù)據(jù)通過HTTP的方式回傳給數(shù)據(jù)接收設(shè)備。
可選的,該設(shè)備包括:
存儲模塊,用于將所述數(shù)據(jù)接收設(shè)備接收到的數(shù)據(jù)存入數(shù)據(jù)庫中。
與現(xiàn)有技術(shù)相比,本申請中通過將采集到的數(shù)據(jù)存入循環(huán)數(shù)組;從所述循環(huán)數(shù)組中提取數(shù)據(jù);將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備;也即通過循環(huán)數(shù)組來完成了數(shù)據(jù)的回傳,通過循環(huán)數(shù)組,使得數(shù)據(jù)在回傳過程中,系統(tǒng)資源開銷小,對監(jiān)控數(shù)據(jù)影響小,從而使得監(jiān)控數(shù)據(jù)更準(zhǔn)確;而在數(shù)據(jù)的獲取以及存入的不同線程是異步的,也即線程間沒有鎖的競爭,進(jìn)一步減少了系統(tǒng)開銷;此外,循環(huán)數(shù)組是事先申請的一塊連續(xù)內(nèi)存區(qū)域,后續(xù)不需要頻繁地申請和釋放內(nèi)存,減少申請和釋放內(nèi)存的開銷。
附圖說明
圖1為本申請實施例提出的一種數(shù)據(jù)傳遞方法的流程示意圖;
圖2為本申請實施例提出的一種循環(huán)數(shù)組的示意圖;
圖3為本申請實施例提出的一種數(shù)據(jù)存儲方法的流程示意圖;
圖4為本申請實施例提出的一種數(shù)據(jù)提取方法的流程示意圖;
圖5為本申請實施例提出的一種數(shù)據(jù)傳遞設(shè)備的結(jié)構(gòu)示意圖。
具體實施方式
如背景技術(shù)所述,現(xiàn)有技術(shù)中的回傳方案都無法滿足對系統(tǒng)資源的消耗要盡可能的小,以及減小對采集的性能監(jiān)控數(shù)據(jù)準(zhǔn)確性的影響的要求,為此,本申請公開了一種數(shù)據(jù)傳遞方法,應(yīng)用于監(jiān)控系統(tǒng)中(監(jiān)控系統(tǒng)要求系統(tǒng)資源消耗盡可能低),用以在數(shù)據(jù)回傳的過程中,實現(xiàn)比現(xiàn)有技術(shù)中耕地的資源消耗,從而有效減小了對采集的性能監(jiān)控數(shù)據(jù)準(zhǔn)確性的影響,該方法如圖1 所示,包括以下步驟:
步驟101、將采集到的數(shù)據(jù)存入循環(huán)數(shù)組。
具體的,循環(huán)數(shù)組如圖2所示,是一個循環(huán)連續(xù)的數(shù)組,循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量的用于存儲數(shù)據(jù)的區(qū)域,各所述區(qū)域之間存在先后順序關(guān)系;其中各個區(qū)域用以零開頭的連續(xù)的數(shù)字進(jìn)行標(biāo)識,從0開始,例如若有7個區(qū)域,則分別標(biāo)識為0、1、2、3、4、5、6;以此,具體的將采集到的數(shù)據(jù)存入循環(huán)數(shù)組,包括:將采集到的數(shù)據(jù)按照所述區(qū)域的先后順序依次存儲在所述循環(huán)數(shù)組的區(qū)域中。
更具體的,所述循環(huán)數(shù)組中包括頭指針和尾指針,所述頭指針和所述尾指針分別對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號與所述頭指針的值相同;所述尾指針對應(yīng)的區(qū)域的編號與所述尾指針的值相同;例如若頭指針或尾指針的值為1,則對應(yīng)的區(qū)域的標(biāo)識數(shù)字也為1;以此具體的將采集到的數(shù)據(jù)按照所述區(qū)域的先后順序依次存儲在所述循環(huán)數(shù)組的區(qū)域中,具體包括:
將采集到的數(shù)據(jù)存入所述循環(huán)數(shù)組中所述尾指針對應(yīng)的區(qū)域;
判斷所述循環(huán)數(shù)組的各區(qū)域是否已滿,且頭指針與尾指針是否對應(yīng)于同一個區(qū)域;
若判斷結(jié)果都為是,則將頭指針的值預(yù)加1;
若判斷結(jié)果為否,則將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值加1;
將尾指針的值預(yù)加1;
判斷當(dāng)前的頭指針或尾指針?biāo)鶎?yīng)的區(qū)域是否溢出所述循環(huán)數(shù)組;
若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述頭指針的值,并將所述頭指針的值歸零;若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則保留預(yù)加1后的頭指針的值為所述頭指針的值;
若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所 述尾指針的值,并將所述尾指針的值歸零;若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則保留預(yù)加1后的尾指針的值為尾指針的值。
事實上,循環(huán)數(shù)組實質(zhì)是一個一定長度的數(shù)組,本申請中通過設(shè)置使其可以實現(xiàn)循環(huán),從而變成循環(huán)數(shù)組,具體的在存儲數(shù)據(jù)的過程中,其過程如圖3所示,首先將數(shù)據(jù)存入尾指針(也即indexEnd)對應(yīng)的區(qū)域,存完后,會判斷循環(huán)數(shù)組中的各個區(qū)域是否滿了(也即存儲的數(shù)據(jù)的數(shù)量是否等于區(qū)域的數(shù)量),為了防止多線程引起的線程安全問題,這里還需要再判斷下頭尾指針是否在同一個位置(也即判斷頭指針indexHead的值是否等于indexEnd的值),因為循環(huán)數(shù)組滿了的時候,頭尾指針必定是在同一個位置的(此時兩個指針正好相差一圈的距離),如果頭尾指針不在同一個位置,說明有多個線程在操作這個數(shù)組,這時候,為了防止線程安全問題,就不能對頭指針進(jìn)行操作。
如果循環(huán)數(shù)組中的各個區(qū)域滿了,且頭尾指針在同一個位置,則頭指針的值預(yù)加1,例如原本為6,預(yù)加1后,變?yōu)?,也即頭指針對應(yīng)的區(qū)域向右移動一個區(qū)域(當(dāng)然也可以設(shè)置為向左移動一個區(qū)域,例如循環(huán)數(shù)組的個區(qū)域是以反序的方式來標(biāo)識的),溢出了循環(huán)數(shù)組,此時,取消對頭指針的進(jìn)行預(yù)加1后的值,設(shè)置頭指針的值為0,這樣,新數(shù)據(jù)覆蓋隊列最前面的一個數(shù)據(jù),數(shù)據(jù)總數(shù)沒有變,所以存儲的數(shù)據(jù)的數(shù)量size不用加1;若循環(huán)數(shù)組的各區(qū)域未滿,則將存儲的數(shù)據(jù)的數(shù)量加1,即size加1;而在頭指針或者尾指針在變化后,需要判斷下其是否溢出了數(shù)組,溢出的指針的值取消預(yù)加1后的值,直接被賦值為0;若沒有溢出,則保留預(yù)加1后的值為指針的值。
存入數(shù)據(jù),也即步驟101是一個線程,此外還存在一個異步的操作,也即進(jìn)行數(shù)據(jù)提取,也即進(jìn)行步驟102。
步驟102、從循環(huán)數(shù)組中提取數(shù)據(jù)。
具體的,循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量的用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū) 域之間存在先后順序關(guān)系;以此,所述從所述循環(huán)數(shù)組中提取數(shù)據(jù),具體包括:
按照所述先后順序關(guān)系依次從所述循環(huán)數(shù)組的區(qū)域中提取數(shù)據(jù)。
而更具體的,所述循環(huán)數(shù)組中包括頭指針,所述頭指針對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號所述頭指針的值相同;
所述按照所述先后順序關(guān)系依次從所述循環(huán)數(shù)組的區(qū)域中提取數(shù)據(jù),具體包括;
判斷所述循環(huán)數(shù)組中是否存儲有數(shù)據(jù);
若判斷結(jié)果為是,則從所述循環(huán)數(shù)組中所述頭指針?biāo)鶎?yīng)的區(qū)域提取數(shù)據(jù);
將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值減1;
將頭指針的值預(yù)加1;
判斷當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域是否溢出了所述循環(huán)數(shù)組;
若判斷結(jié)果為是,則取消預(yù)加1后的頭指針的值,并將頭指針的值歸零;
若判斷結(jié)果為否,則保留預(yù)加1后的頭指針的值為頭指針的值。
具體的數(shù)據(jù)提取過程如圖4所示,首先判斷size是否大于0,也即判斷循環(huán)數(shù)組中是否存儲有數(shù)據(jù),但確定存儲有數(shù)據(jù)時,則從頭指針(indexHead)對應(yīng)的區(qū)域提取數(shù)據(jù);將數(shù)據(jù)提取出來后,將size減1,也即將循環(huán)數(shù)組中存儲的數(shù)據(jù)的數(shù)量減1,然后頭指針的值預(yù)加1,也即頭指針對應(yīng)的區(qū)域向右移動一個區(qū)域,當(dāng)然也可以是向左移動一個區(qū)域,具體的可以設(shè)置,只要保證頭指針和尾指針的值變化后,相同的變化移動的是相同的區(qū)域即可,并判斷加1后的頭指針的值是否溢出了循環(huán)數(shù)組,而具體的可以使用&位運(yùn)算來完成破判斷的過程,規(guī)定循環(huán)數(shù)組的大小為2的指數(shù)倍,用QUEUE_SIZE來表示,指針用index表示。那么移動后,指針的位置就是(index+1)&(QUEUE_SIZE-1);直接使用位運(yùn)算就可以得到,避免了if判斷操 作、加減法操作和取余操作,運(yùn)算起來更快,系統(tǒng)資源開銷更小,例如當(dāng)預(yù)加1后的頭指針的值為7,但標(biāo)識循環(huán)數(shù)組中區(qū)域的最大的數(shù)字為6,由于7>6,則可以確定溢出了,在此情況下,直接將頭指針的值歸零,也即將頭指針對應(yīng)的區(qū)域設(shè)置為循環(huán)數(shù)組中被標(biāo)識為0的區(qū)域,也即順序上的第一個區(qū)域;若沒有溢出,則保留預(yù)加1后的值(例如為7)作為頭指針的值,并結(jié)束操作。
前述的步驟101和步驟102只是基于描述的需要設(shè)置的標(biāo)號,并不具有順序的含義,事實上,這兩個步驟屬于異步的操作,且互相是不會干擾的,也即在執(zhí)行步驟101的同時,是可以同時執(zhí)行步驟102的。
步驟103、將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備。
具體的回傳過程,可以包括:
將提取的數(shù)據(jù)通過HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)的方式回傳給數(shù)據(jù)接收設(shè)備;當(dāng)然除此以外,還可以有很多別的方式來實現(xiàn)回傳,只要能實現(xiàn)數(shù)據(jù)的準(zhǔn)確有效地傳遞即可,并不限于HTTP這一種方式。
而在將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備之后,還包括:
將所述數(shù)據(jù)接收設(shè)備接收到的數(shù)據(jù)存入數(shù)據(jù)庫中。
為了對本申請進(jìn)行進(jìn)一步的說明,本申請還公開了一種數(shù)據(jù)傳遞設(shè)備,如圖5所示,包括:
存入模塊501,用于將采集到的數(shù)據(jù)存入循環(huán)數(shù)組;
提取模塊502,用于從所述循環(huán)數(shù)組中提取數(shù)據(jù);
回傳模塊503,用于將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備。
具體的,所述循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū)域之間存在先后順序關(guān)系;
所述存入模塊501,具體用于:
將采集到的數(shù)據(jù)按照所述區(qū)域的先后順序依次存儲在所述循環(huán)數(shù)組的區(qū) 域中。
所述循環(huán)數(shù)組中包括頭指針和尾指針,所述頭指針和所述尾指針分別對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針和所述尾指針分別對應(yīng)的區(qū)域的編號分別與所述頭指針和所述尾指針的值相同;
所述存入模塊501,具體用于:
將采集到的數(shù)據(jù)存入所述循環(huán)數(shù)組中所述尾指針對應(yīng)的區(qū)域;
判斷所述循環(huán)數(shù)組的各區(qū)域是否已滿,且頭指針與尾指針是否對應(yīng)于同一個區(qū)域;
若判斷結(jié)果都為是,則將頭指針的值預(yù)加1;
若判斷結(jié)果為否,則將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值加1;
將尾指針的值預(yù)加1;
判斷當(dāng)前的頭指針或尾指針?biāo)鶎?yīng)的區(qū)域是否溢出所述循環(huán)數(shù)組;
若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述頭指針的值,并將所述頭指針的值歸零;若當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則保留預(yù)加1后的頭指針的值為所述頭指針的值;
若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域溢出所述循環(huán)數(shù)組,則取消預(yù)加1后的所述尾指針的值,并將所述尾指針的值歸零;若當(dāng)前的尾指針?biāo)鶎?yīng)的區(qū)域沒有溢出所述循環(huán)數(shù)組,則保留預(yù)加1后的尾指針的值為尾指針的值。
具體的,所述循環(huán)數(shù)組中包含有預(yù)設(shè)數(shù)量用于存儲數(shù)據(jù)的區(qū)域;各所述區(qū)域之間存在先后順序關(guān)系;
所述提取模塊502,具體用于:
按照所述先后順序關(guān)系依次從所述循環(huán)數(shù)組的區(qū)域中提取數(shù)據(jù)。
所述循環(huán)數(shù)組中包括頭指針,所述頭指針對應(yīng)所述循環(huán)數(shù)組中一個區(qū)域;所述頭指針對應(yīng)的區(qū)域的編號所述頭指針的值相同;
所述提取模塊502,具體用于;
判斷所述循環(huán)數(shù)組中是否存儲有數(shù)據(jù);
若判斷結(jié)果為是,則從所述循環(huán)數(shù)組中所述頭指針?biāo)鶎?yīng)的區(qū)域提取數(shù)據(jù);
將表示所述循環(huán)數(shù)組中數(shù)據(jù)的數(shù)量的數(shù)值減1;
將頭指針的值預(yù)加1;
判斷當(dāng)前的頭指針?biāo)鶎?yīng)的區(qū)域是否溢出了所述循環(huán)數(shù)組;
若判斷結(jié)果為是,則取消預(yù)加1后的頭指針的值,并將頭指針的值歸零;
若判斷結(jié)果為否,則保留預(yù)加1后的頭指針的值為頭指針的值。
具體的,所述回傳模塊503,具體用于:
將提取的數(shù)據(jù)通過HTTP的方式回傳給數(shù)據(jù)接收設(shè)備。
具體的,該設(shè)備,還包括:
存儲模塊,用于將所述數(shù)據(jù)接收設(shè)備接收到的數(shù)據(jù)存入數(shù)據(jù)庫中。
與現(xiàn)有技術(shù)相比,本申請中通過將采集到的數(shù)據(jù)存入循環(huán)數(shù)組;從所述循環(huán)數(shù)組中提取數(shù)據(jù);將提取的數(shù)據(jù)回傳給數(shù)據(jù)接收設(shè)備;也即通過循環(huán)數(shù)組來完成了數(shù)據(jù)的回傳,通過循環(huán)數(shù)組,使得數(shù)據(jù)在回傳過程中,系統(tǒng)資源開銷小,對監(jiān)控數(shù)據(jù)影響小,從而使得監(jiān)控數(shù)據(jù)更準(zhǔn)確;而在數(shù)據(jù)的獲取以及存入的不同線程是異步的,也即線程間沒有鎖的競爭,進(jìn)一步減少了系統(tǒng)開銷;此外,循環(huán)數(shù)組是事先申請的一塊連續(xù)內(nèi)存區(qū)域,后續(xù)不需要頻繁地申請和釋放內(nèi)存,減少申請和釋放內(nèi)存的開銷。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可以通過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)。基于這樣的理解,本申請的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是CD-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服 務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施場景所述的方法。
本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施場景的示意圖,附圖中的模塊或流程并不一定是實施本申請所必須的。
本領(lǐng)域技術(shù)人員可以理解實施場景中的裝置中的模塊可以按照實施場景描述進(jìn)行分布于實施場景的裝置中,也可以進(jìn)行相應(yīng)變化位于不同于本實施場景的一個或多個裝置中。上述實施場景的模塊可以合并為一個模塊,也可以進(jìn)一步拆分成多個子模塊。
上述本申請序號僅僅為了描述,不代表實施場景的優(yōu)劣。
以上公開的僅為本申請的幾個具體實施場景,但是,本申請并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本申請的保護(hù)范圍。