一種基于sntp的同步時(shí)間方法及sntp客戶端的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及同步時(shí)間技術(shù)領(lǐng)域,具體為一種基于SNTP的同步時(shí)間方法及SNTP客戶端。
【背景技術(shù)】
[0002]在一些特定的場(chǎng)景中,經(jīng)常需要整個(gè)網(wǎng)絡(luò)中的計(jì)算機(jī)保持同步時(shí)間。例如,空中管制系統(tǒng)或者軌道交通控制系統(tǒng)中的計(jì)算機(jī)的時(shí)間需要保持精確同步。在大型計(jì)算機(jī)系統(tǒng)中,往往由很多臺(tái)計(jì)算機(jī)共同執(zhí)行某個(gè)計(jì)算,也需要各臺(tái)計(jì)算機(jī)保持同步時(shí)間。那么,我們通過(guò)什么方法來(lái)同步這些計(jì)算機(jī)的時(shí)間呢?
[0003]科學(xué)家發(fā)明了一種叫做NTP的網(wǎng)絡(luò)時(shí)間協(xié)議。網(wǎng)絡(luò)時(shí)間協(xié)議是一種在網(wǎng)絡(luò)計(jì)算機(jī)上同步計(jì)算機(jī)時(shí)間的的協(xié)議,它具有高度的精確性(能精確到幾十毫秒),但是算法非常復(fù)雜。實(shí)際上,在很多應(yīng)用場(chǎng)景中,并不需要這么高的精確度,通常只要達(dá)到秒級(jí)的精確度就足夠了。于是,科學(xué)家在NTP的基礎(chǔ)上推出了 SNTP(簡(jiǎn)單網(wǎng)絡(luò)時(shí)間協(xié)議,Simple NetworkTime Protocol)。SNTP大大簡(jiǎn)化了 NTP協(xié)議,同時(shí)也能保證時(shí)間達(dá)到一定的精確度。在實(shí)際應(yīng)用中,SNTP協(xié)議主要被用來(lái)同步因特網(wǎng)上計(jì)算機(jī)的時(shí)間。
[0004]SNTP協(xié)議采用客戶端/服務(wù)器的工作方式,可以采用單播(點(diǎn)對(duì)點(diǎn))或者廣播(一點(diǎn)對(duì)多點(diǎn))模式操作。SNTP服務(wù)器通過(guò)接收GPS信號(hào)或自帶的原子鐘作為系統(tǒng)的時(shí)間基準(zhǔn)。單播模式下,SNTP客戶端能夠通過(guò)定期訪問(wèn)SNTP服務(wù)器獲得準(zhǔn)確的時(shí)間信息,用于調(diào)整客戶端自身所在系統(tǒng)的時(shí)間,達(dá)到同步時(shí)間的目的。廣播模式下,SNTP服務(wù)器周期性地發(fā)送消息給指定的IP廣播地址或者IP多播地址。SNTP客戶端通過(guò)監(jiān)聽(tīng)這些地址來(lái)獲得時(shí)間?目息。
[0005]網(wǎng)絡(luò)中一般存在很多臺(tái)SNTP服務(wù)器,客戶端會(huì)通過(guò)一定的算法選擇最好的幾臺(tái)服務(wù)器使用。如果一臺(tái)SNTP服務(wù)器在工作過(guò)程中失去了外部時(shí)間源,此時(shí)SNTP服務(wù)器會(huì)告訴SNTP客戶端“我失去了外部時(shí)間”。當(dāng)SNTP客戶端收到這個(gè)信息時(shí),就會(huì)丟棄發(fā)生故障的SNTP服務(wù)器發(fā)給它的時(shí)間信息,然后重新選擇其他的SNTP服務(wù)器。
[0006]現(xiàn)在每一臺(tái)電子設(shè)備上都會(huì)設(shè)計(jì)一個(gè)RTC模塊,用來(lái)保存時(shí)間。每臺(tái)隨著時(shí)間的推移會(huì)和標(biāo)準(zhǔn)時(shí)間發(fā)生偏差,這個(gè)時(shí)候就需要向SNTP服務(wù)器發(fā)送數(shù)據(jù)。同步到標(biāo)準(zhǔn)時(shí)間,以減小誤差。SNTP客戶端在同步時(shí)間的時(shí)候,使用開(kāi)機(jī)更新,長(zhǎng)時(shí)間開(kāi)機(jī),時(shí)間不能有效同步。使用定時(shí)更新,定義時(shí)間太短,損耗系統(tǒng)資源,定義時(shí)間太長(zhǎng)不能有效更新時(shí)間。使用SLEEP等待,占用時(shí)間片,損耗系統(tǒng)資源。
【發(fā)明內(nèi)容】
[0007]鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種基于SNTP的同步時(shí)間方法及SNTP客戶端,用于解決現(xiàn)有技術(shù)中在同步時(shí)間時(shí)存在的同步效果差、耗損系統(tǒng)資源的問(wèn)題。
[0008]為實(shí)現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種基于SNTP的同步時(shí)間方法,應(yīng)用于電子設(shè)備通過(guò)電子設(shè)備內(nèi)裝設(shè)的SNTP客戶端向提供基準(zhǔn)時(shí)間的SNTP服務(wù)器同步時(shí)間的過(guò)程中,所述基于SNTP的同步時(shí)間方法包括:S1,記錄所述電子設(shè)備的當(dāng)前時(shí)間并將其標(biāo)記為第一時(shí)間;S2,在所述SNTP客戶端內(nèi)添加用于啟動(dòng)SNTP服務(wù)的啟動(dòng)SNTP定時(shí)器;S3,在所述啟動(dòng)SNTP定時(shí)器到達(dá)定時(shí)時(shí)間時(shí),所述SNTP客戶端啟動(dòng)SNTP同步過(guò)程并添加用于開(kāi)始檢測(cè)SNTP同步時(shí)間的檢測(cè)SNTP定時(shí)器;S4,在所述檢測(cè)SNTP定時(shí)器到達(dá)定時(shí)時(shí)間時(shí),開(kāi)始檢測(cè)SNTP同步時(shí)間并在獲取到SNTP同步時(shí)間時(shí),記錄所述電子設(shè)備的當(dāng)前時(shí)間并將其標(biāo)記為第二時(shí)間;S5,將獲取的SNTP同步時(shí)間同步到所述電子設(shè)備中,同時(shí)將所述啟動(dòng)SNTP定時(shí)器的定時(shí)時(shí)間設(shè)置為所述第二時(shí)間與第一時(shí)間的差值,并將所述第一時(shí)間的值更新為所述SNTP同步時(shí)間。
[0009]優(yōu)選地,在步驟SI中,在所述電子設(shè)備啟動(dòng)或配置有修改時(shí),記錄所述電子設(shè)備的當(dāng)前時(shí)間并將其標(biāo)記為第一時(shí)間。
[0010]優(yōu)選地,在步驟S4中,在所述檢測(cè)SNTP定時(shí)器到達(dá)定時(shí)時(shí)間時(shí),開(kāi)始檢測(cè)SNTP同步時(shí)間后,還包括判斷是否獲取到SNTP同步時(shí)間,若未獲取到SNTP同步時(shí)間時(shí),返回至步驟S2。
[0011 ] 優(yōu)選地,在步驟S4中,在所述檢測(cè)SNTP定時(shí)器到達(dá)定時(shí)時(shí)間時(shí),開(kāi)始檢測(cè)SNTP同步時(shí)間并在獲取到SNTP同步時(shí)間時(shí)還包括:判斷所述SNTP同步時(shí)間與所述第二時(shí)間之間的時(shí)間差絕對(duì)值是否大于預(yù)設(shè)時(shí)間差,若是,則接著執(zhí)行步驟S5,若否,則返回至步驟S2。
[0012]優(yōu)選地,所述預(yù)設(shè)時(shí)間差的取值范圍為0.1s?10s。
[0013]為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種SNTP客戶端,裝設(shè)于所述電子設(shè)備內(nèi),應(yīng)用于電子設(shè)備向提供基準(zhǔn)時(shí)間的SNTP服務(wù)器同步時(shí)間的過(guò)程中,所述SNTP客戶端包括:時(shí)間同步模塊,與提供基準(zhǔn)時(shí)間SNTP服務(wù)器相連,向所述SNTP服務(wù)器同步時(shí)間;時(shí)間記錄模塊,與所述時(shí)間同步模塊相連,配置于所述SNTP客戶端內(nèi),記錄所述電子設(shè)備的當(dāng)前時(shí)間并將其標(biāo)記為第一時(shí)間;定時(shí)器添加模塊,包括:啟動(dòng)SNTP定時(shí)器添加單元,與所述時(shí)間同步模塊和所述時(shí)間記錄模塊相連,用于添加啟動(dòng)SNTP定時(shí)器,在所述啟動(dòng)SNTP定時(shí)器到達(dá)定時(shí)時(shí)間時(shí)使得所述時(shí)間同步模塊啟動(dòng)SNTP同步過(guò)程;檢測(cè)SNTP定時(shí)器添加單元,與所述時(shí)間同步模塊相連,用于在所述時(shí)間同步模塊啟動(dòng)SNTP同步過(guò)程時(shí)添加檢測(cè)SNTP定時(shí)器,在所述檢測(cè)SNTP定時(shí)器到達(dá)定時(shí)時(shí)間時(shí),使得所述時(shí)間同步模塊開(kāi)始檢測(cè)SNTP同步時(shí)間;在所述時(shí)間同步模塊獲取到SNTP同步時(shí)間時(shí),所述記錄模塊記錄所述電子設(shè)備的當(dāng)前時(shí)間并將其標(biāo)記為第二時(shí)間;所述時(shí)間同步模塊將獲取的SNTP同步時(shí)間同步到所述電子設(shè)備中,同時(shí)在所述啟動(dòng)SNTP定時(shí)器添加單元中添加所述啟動(dòng)SNTP定時(shí)器并將所述啟動(dòng)SNTP定時(shí)器的定時(shí)時(shí)間設(shè)置為當(dāng)所述第二時(shí)間與第一時(shí)間的差值,并將所述第一時(shí)間的值更新為所述SNTP同步時(shí)間。
[0014]優(yōu)選地,在所述電子設(shè)備啟動(dòng)或配置有修改時(shí),所述記錄模塊記錄所述電子設(shè)備的當(dāng)前時(shí)間并將其標(biāo)記為第一時(shí)間。
[0015]優(yōu)選地,所述SNTP客戶端還包括:判斷模塊,配置于所述SNTP客戶端內(nèi),所述判斷模塊用于判斷所述時(shí)間同步模塊是否獲取到SNTP同步時(shí)間;在所述時(shí)間同步模塊未獲取到SNTP同步時(shí)間時(shí),在所述啟動(dòng)SNTP定時(shí)器添加單元中重新添加所述啟動(dòng)SNTP定時(shí)器。
[0016]優(yōu)選地,在所述時(shí)間同步模塊獲取到SNTP同步時(shí)間時(shí),所述判斷模塊還用于判斷所述SNTP同步時(shí)間與所述第二時(shí)間之間的時(shí)間差絕對(duì)值是否大于預(yù)設(shè)時(shí)間差,若是,則所述SNTP客戶端將獲取的SNTP同步時(shí)間同步到所述電子設(shè)備中,若否則在所述啟動(dòng)SNTP定時(shí)器添加單元中重新添加所述啟動(dòng)SNTP定時(shí)器。
[0017]優(yōu)選地,所述預(yù)設(shè)時(shí)間差的取值范圍為0.1s?10s。
[0018]如上所述,本發(fā)明的一種基于SNTP的同步時(shí)間方法及SNTP客戶端,具有以下有益效果:
[0019]本發(fā)明使用定時(shí)器來(lái)定時(shí)更新時(shí)間,同步時(shí)間效果好,而且設(shè)置各電子設(shè)備的同步間隔,區(qū)分對(duì)待每臺(tái)設(shè)備的時(shí)鐘差異,同步的等待時(shí)間可以根據(jù)每臺(tái)電子設(shè)備的走動(dòng)