游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法
【專利摘要】本發(fā)明提出了一種游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,包括如下步驟:S1:服務(wù)器啟動時緩存當(dāng)前時間;S2:在程序運(yùn)行過程中,服務(wù)器定期刷新緩存時間;S3:在程序運(yùn)行過程中,游戲服務(wù)器獲取時間時,統(tǒng)一通過獲取緩存的當(dāng)前時間。本發(fā)明的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,對比于傳統(tǒng)的時間處理方案,能更有效地保證時間的單調(diào)遞增性,性能更高效;并能保證在服務(wù)器關(guān)閉維護(hù)后依然能保證時間的單調(diào)遞增性;且能很容易的加速或者減速服務(wù)器的時間運(yùn)行,方便特殊邏輯的調(diào)試,完善服務(wù)器對意外情況的處理能力。
【專利說明】游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及游戲服務(wù)器處理技術(shù),具體涉及游戲服務(wù)器時間處理的方法。
【背景技術(shù)】
[0002]操作系統(tǒng)為了應(yīng)對各種各樣的時間需求,其時間精度很高。操作系統(tǒng)的時間可以被簡單的設(shè)置,這樣可能會導(dǎo)致游戲服務(wù)器的時間不是單調(diào)遞增的,而引起依賴于時間的游戲邏輯錯誤。此外,對于游戲中的時間觸發(fā)的邏輯,可能會因?yàn)榉?wù)器在某一個時刻很卡,導(dǎo)致某一時刻的系統(tǒng)時間被跳過,而無法進(jìn)行時間觸發(fā)。為保證時間的準(zhǔn)確性,現(xiàn)有技術(shù)一般采用頻繁讀取系統(tǒng)時間的方式而保障時間精確度,然而游戲服務(wù)器對時間精度的需求都不高,一般100毫秒基本就夠了,如果頻繁的讀取系統(tǒng)時間反而會因?yàn)椴槐匾臅r間精度浪費(fèi)計(jì)算機(jī)性能。
【發(fā)明內(nèi)容】
[0003]針對上述現(xiàn)有技術(shù)不足,本發(fā)明要解決的技術(shù)問題是提供一種滿足游戲服務(wù)器時間需求,保證游戲服務(wù)器時間是單調(diào)遞增的,避免游戲邏輯錯誤。
[0004]為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案為,游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,包括如下步驟:
[0005]S1:服務(wù)器啟動時,獲取當(dāng)前現(xiàn)實(shí)時間進(jìn)行緩存,作為虛擬時間的時間值起點(diǎn);
[0006]S2:在程序運(yùn)行過程中,服務(wù)器定期刷新緩存內(nèi)的時間值,作為當(dāng)前虛擬時間;
[0007]S3:在程序運(yùn)行過程中,服務(wù)器需要獲得時間條件執(zhí)行邏輯的,均通過緩存內(nèi)的虛擬時間作為時間條件。
[0008]這樣的方案使服務(wù)器的時間不以操作系統(tǒng)為依據(jù),而由游戲服務(wù)器本身的緩存時間進(jìn)行獲取,提高性能,并保證時間是單調(diào)遞增的。
[0009]進(jìn)一步的技術(shù)方案為,所述步驟S2中,服務(wù)器每間隔一個游戲最小時間單位,刷新一次緩存內(nèi)的時間值。
[0010]這樣的方案保證游戲的每一個時間都會作為時間條件而被執(zhí)行邏輯,不會因?yàn)榉?wù)器卡而跳過某些時間,導(dǎo)致某些邏輯無法執(zhí)行,而令運(yùn)行出現(xiàn)邏輯錯誤。
[0011]再進(jìn)一步的技術(shù)方案為,所述步驟S2中,刷新緩存內(nèi)時間值的具體步驟為:通過服務(wù)器的CPU時鐘周期及服務(wù)器標(biāo)準(zhǔn)幀率,計(jì)算一個游戲最小時間單位內(nèi)執(zhí)行邏輯數(shù)量的理論標(biāo)準(zhǔn)值;當(dāng)累計(jì)執(zhí)行的邏輯數(shù)量達(dá)到理論標(biāo)準(zhǔn)值時,對緩存內(nèi)的時間值增加一個游戲最小時間單位,并重新累計(jì)一次執(zhí)行的邏輯數(shù)量。
[0012]這樣的方案使虛擬時間不依賴外接時間而增加。
[0013]再進(jìn)一步的技術(shù)方案為,所述步驟S2中,還包括把每次累計(jì)中執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間與游戲最小時間單位進(jìn)行對比的步驟,當(dāng)執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間大于游戲最小時間單位時,增大服務(wù)器的實(shí)際幀率,直到當(dāng)執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間等于游戲最小時間單位時,把服務(wù)器的實(shí)際幀率重新調(diào)整為服務(wù)器標(biāo)準(zhǔn)幀率。
[0014]這樣的方案使服務(wù)器具有追趕時間的能力,但又不跳過每一個時間。
[0015]進(jìn)一步的技術(shù)方案為,還包括步驟S4:當(dāng)收到關(guān)閉服務(wù)器命令時,服務(wù)器在關(guān)閉過程中,保存一次時間記錄文件;
[0016]所述步驟SI中,還包括在服務(wù)器啟動時,讀取時間記錄文件,判斷時間合法性的步驟;若合法,則執(zhí)行步驟Si,正常啟動后續(xù)步驟;若不合法,則停止執(zhí)行后續(xù)步驟,退出進(jìn)程。
[0017]這樣的方案使得服務(wù)器在關(guān)閉后重啟時仍能保證時間的單調(diào)遞增,避免因服務(wù)器啟動時就存在時間錯誤而引發(fā)邏輯錯誤。
[0018]再進(jìn)一步的技術(shù)方案為,所述步驟S4中,保存時間記錄文件,具體為在時間記錄文件中,標(biāo)記服務(wù)器狀態(tài)為關(guān)閉,并記錄關(guān)閉時的虛擬時間;
[0019]所述步驟SI中,判斷時間合法性的步驟具體為:當(dāng)時間記錄文件中的服務(wù)器狀態(tài)為關(guān)閉時,若當(dāng)前現(xiàn)實(shí)時間或虛擬時間大于關(guān)閉時的虛擬時間,則判斷為時間合法;否則,判斷為時間不合法。
[0020]更進(jìn)一步的技術(shù)方案為,還包括步驟S5:在程序運(yùn)行過程中,每相隔一個指定時間,更新一次時間記錄文件,把時間記錄文件中的服務(wù)器狀態(tài)標(biāo)記為運(yùn)行,并記錄當(dāng)時的虛擬時間;
[0021]所述步驟SI,判斷時間合法性的步驟還包括:當(dāng)時間記錄文件中的服務(wù)器狀態(tài)為運(yùn)行時,若當(dāng)前現(xiàn)實(shí)時間或虛擬時間減去記錄時的虛擬時間的差值大于指定時間,則判斷為時間合法;否則,判斷為時間不合法。
[0022]這樣的方案保證服務(wù)器在不正常關(guān)閉的情況下,啟動時仍能保證時間的單調(diào)遞
士豳
>曰ο
[0023]優(yōu)選的技術(shù)方案為,所述指定時間為3-6分鐘。
[0024]本發(fā)明的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,對比于傳統(tǒng)的時間處理方案,能更有效地保證時間的單調(diào)遞增性,性能更高效;并能保證在服務(wù)器關(guān)閉維護(hù)后依然能保證時間的單調(diào)遞增性;且能很容易的加速或者減速服務(wù)器的時間運(yùn)行,方便特殊邏輯的調(diào)試,完善服務(wù)器對意外情況的處理能力。
【具體實(shí)施方式】
[0025]下面通過具體實(shí)施例對本發(fā)明作進(jìn)一步的詳細(xì)描述。
[0026]本發(fā)明的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,包括如下步驟:
[0027]S1:服務(wù)器啟動時,獲取當(dāng)前現(xiàn)實(shí)時間進(jìn)行緩存,作為虛擬時間的時間值起點(diǎn);并通過讀取時間記錄文件以判斷時間合法性,當(dāng)判斷為時間合法時,運(yùn)行進(jìn)程,當(dāng)判斷為時間不合法時退出進(jìn)程。
[0028]S2:在程序運(yùn)行過程中,服務(wù)器定期刷新緩存內(nèi)的時間值,作為當(dāng)前虛擬時間;具體地,服務(wù)器每間隔一個游戲最小時間單位,刷新一次緩存內(nèi)的時間值。游戲最小時間單位由游戲本身的設(shè)計(jì)而定,例如某游戲以秒為單位作為判斷游戲事件的觸發(fā)條件之一,則該游戲的最小時間單位為I秒,若某游戲的游戲動作以0.1秒為單位作為動作畫面的播放條件之一,則該游戲的最小時間單位為0.1秒;游戲的最小時間單位不是由本發(fā)明所決定,更不是由本發(fā)明的實(shí)施者人為規(guī)定,而是由采用本發(fā)明的技術(shù)方案所應(yīng)用的游戲本身而定;當(dāng)然,刷新的周期可以是比游戲最小時間單位要小,這樣可使時間計(jì)算更精確,但對于游戲而言這樣提高時間精度反而浪費(fèi)了服務(wù)器的硬件性能。另一方面,刷新的周期不能比游戲最小時間單位要大,如果刷新周期比游戲最小時間單位大,則有可能導(dǎo)致虛擬時間跳過了某些時間點(diǎn),導(dǎo)致邏輯無法正確觸發(fā)。
[0029]具體地,本實(shí)施例中,步驟S2的刷新緩存內(nèi)時間值的具體步驟為:通過服務(wù)器的CPU時鐘周期及服務(wù)器標(biāo)準(zhǔn)幀率,計(jì)算一個游戲最小時間單位內(nèi)執(zhí)行邏輯數(shù)量的理論標(biāo)準(zhǔn)值;以游戲最小時間單位為I秒為例,若根據(jù)服務(wù)器的CPU時鐘周期和服務(wù)器標(biāo)準(zhǔn)幀率可以計(jì)算出理論上I秒能執(zhí)行5個邏輯,即所述理論標(biāo)準(zhǔn)值為5 ;當(dāng)累計(jì)執(zhí)行的邏輯數(shù)量達(dá)到5個時,對緩存內(nèi)的時間值增加I秒,并重新累計(jì)一次執(zhí)行的邏輯數(shù)量。若執(zhí)行的刷新周期不是游戲最小時間單位,則計(jì)算執(zhí)行邏輯數(shù)量的理論標(biāo)準(zhǔn)值以刷新周期為依據(jù),例如上文的例子,若刷新周期為0.1秒,則執(zhí)行邏輯數(shù)量的理論標(biāo)準(zhǔn)值應(yīng)為I個。根據(jù)CPU的時鐘周期和服務(wù)器的幀率計(jì)算理論上I秒內(nèi)執(zhí)行多少個邏輯數(shù)量,是本領(lǐng)域技術(shù)人員的公知常識,在此不再贅述。CPU的時鐘周期是由CPU的硬件決定的,服務(wù)器的幀率可以設(shè)置,所述標(biāo)準(zhǔn)幀率是指正常運(yùn)行服務(wù)器時的預(yù)定幀率,而不是實(shí)際上服務(wù)器運(yùn)行時的幀率。虛擬時間的增加不依賴于外界時間,這樣的方式可以避免因服務(wù)器卡而跳過某些時間點(diǎn),導(dǎo)致邏輯錯誤。
[0030]然而,當(dāng)服務(wù)器卡時,執(zhí)行5個邏輯所需的實(shí)際時間會大于I秒(仍以上文中的例子為例),此時虛擬時間仍然增加I秒,雖然邏輯能正確觸發(fā)不會被跳過,但會導(dǎo)致虛擬時間一直落后于實(shí)際時間。為解決此問題,步驟S2中還包括把每次累計(jì)中執(zhí)行一個理論標(biāo)準(zhǔn)值(5個)數(shù)量的邏輯的實(shí)際時間與游戲最小時間單位(I秒)進(jìn)行對比的步驟,當(dāng)執(zhí)行5個邏輯的實(shí)際時間大于I秒時,以3秒為例,緩存內(nèi)的虛擬時間的時間值仍然只增加I秒,但增大服務(wù)器的實(shí)際幀率,使執(zhí)行5個邏輯的標(biāo)準(zhǔn)時間縮短,例如0.7秒,即后幾秒的時間內(nèi),每0.7秒實(shí)際時間虛擬時間就增加I秒,這樣逐步使虛擬時間追趕實(shí)際時間,直到當(dāng)執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間等于游戲最小時間單位時,即虛擬時間追上實(shí)際時間時,把服務(wù)器的實(shí)際幀率重新調(diào)整為服務(wù)器標(biāo)準(zhǔn)幀率,重新正常運(yùn)行。如果不是處于追趕狀態(tài)時,執(zhí)行5個邏輯的實(shí)際少于I秒時,虛擬時間不馬上增加,而是等到夠I秒時才增加。
[0031]S3:在程序運(yùn)行過程中,服務(wù)器需要獲得時間條件執(zhí)行邏輯的,均通過緩存內(nèi)的虛擬時間作為時間條件。服務(wù)器調(diào)用時間為條件判斷時,不讀取外部時間、不讀取游戲終端機(jī)的操作系統(tǒng)時間,而時讀取自身緩存的虛擬時間,既提高性能效率,又保證時間的正確性。
[0032]S5:在程序運(yùn)行過程中,每相隔一個指定時間(本實(shí)施例為5分鐘,優(yōu)選地為3-6分鐘),更新一次時間記錄文件。
[0033]S4:當(dāng)收到關(guān)閉服務(wù)器命令時,服務(wù)器在關(guān)閉過程中,保存一次時間記錄文件。
[0034]具體地,保存時間記錄文件包括記錄服務(wù)器的狀態(tài)及當(dāng)時的虛擬時間,其中,在步驟S4中,把服務(wù)器狀態(tài)標(biāo)記為關(guān)閉并記錄關(guān)閉時的虛擬時間;而在步驟S5中,把服務(wù)器狀態(tài)標(biāo)記為運(yùn)行,并記錄保存操作當(dāng)時的虛擬時間。而在步驟SI中,判斷服務(wù)器啟動時時間合法性的步驟為,先判斷時間記錄文件中的服務(wù)器狀態(tài),若服務(wù)器狀態(tài)為關(guān)閉,則表示上次服務(wù)器為正常關(guān)閉狀態(tài),比較服務(wù)器的當(dāng)前時間與時間記錄文件中所記錄的時間,若服務(wù)器當(dāng)前時間大于關(guān)閉時間,即可保證服務(wù)器開啟時的時間是遞增的,可判斷為時間合法;當(dāng)服務(wù)器狀態(tài)為運(yùn)行時,表明上一次服務(wù)器關(guān)閉時為非正常關(guān)閉,此時比較服務(wù)器的當(dāng)前時間與時間記錄文件中所記錄的時間,若當(dāng)前時間減去所記錄的時間的差值大于指定時間,則判斷為合法,否則判斷為不合法。當(dāng)差值大于指定時間時,表明服務(wù)器關(guān)閉的過程中跳過了一次保存操作,可保證服務(wù)器時間已是單調(diào)增的情況,指定時間優(yōu)選為3-6分鐘,這個時間可以保證服務(wù)器重新進(jìn)入正常運(yùn)行狀態(tài)。服務(wù)器啟動時的當(dāng)前時間可以是服務(wù)器從外界(例如時間服務(wù)器、互聯(lián)網(wǎng)等)獲取的現(xiàn)實(shí)時間也可以是已經(jīng)緩存了的虛擬時間,由于服務(wù)器的硬件處理速度很快,執(zhí)行緩存虛擬時間起點(diǎn)及比較時間兩項(xiàng)操作的耗時遠(yuǎn)小于一般游戲的游戲最小時間單位,對于本發(fā)明的技術(shù)方案而言,此兩個操作可以理解為同時進(jìn)行,而實(shí)際實(shí)施本發(fā)明時,其先后順序不影響處理效果。保存時間記錄文件的操作,是為了保證在服務(wù)器關(guān)閉維護(hù)后,仍能保持時間的單調(diào)遞增性,而運(yùn)行過程中保存時間記錄文件則更進(jìn)一步保證即使服務(wù)器不正常關(guān)閉,仍能保持時間的單調(diào)遞增性??扇∠4鏁r間記錄文件的步驟,對應(yīng)取消步驟SI中的時間合法性判斷步驟,或者采用其他形式保障服務(wù)器關(guān)閉后重新啟動的時間合法性。
[0035]以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:包括如下步驟: S1:服務(wù)器啟動時,獲取當(dāng)前現(xiàn)實(shí)時間進(jìn)行緩存,作為虛擬時間的時間值起點(diǎn); 52:在程序運(yùn)行過程中,服務(wù)器定期刷新緩存內(nèi)的時間值,作為當(dāng)前虛擬時間; 53:在程序運(yùn)行過程中,服務(wù)器需要獲得時間條件執(zhí)行邏輯的,均通過緩存內(nèi)的虛擬時間作為時間條件。
2.根據(jù)權(quán)利要求1所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:所述步驟S2中,服務(wù)器每間隔一個游戲最小時間單位,刷新一次緩存內(nèi)的時間值。
3.根據(jù)權(quán)利要求2所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:所述步驟S2中,刷新緩存內(nèi)時間值的具體步驟為:通過服務(wù)器的CPU時鐘周期及服務(wù)器標(biāo)準(zhǔn)幀率,計(jì)算一個游戲最小時間單位內(nèi)執(zhí)行邏輯數(shù)量的理論標(biāo)準(zhǔn)值;當(dāng)累計(jì)執(zhí)行的邏輯數(shù)量達(dá)到理論標(biāo)準(zhǔn)值時,對緩存內(nèi)的時間值增加一個游戲最小時間單位,并重新累計(jì)一次執(zhí)行的邏輯數(shù)量。
4.根據(jù)權(quán)利要求3所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:所述步驟S2中,還包括把每次累計(jì)中執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間與游戲最小時間單位進(jìn)行對比的步驟,當(dāng)執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間大于游戲最小時間單位時,增大服務(wù)器的實(shí)際幀率,直到當(dāng)執(zhí)行一個理論標(biāo)準(zhǔn)值數(shù)量的邏輯的實(shí)際時間等于游戲最小時間單位時,把服務(wù)器的實(shí)際幀率重新調(diào)整為服務(wù)器標(biāo)準(zhǔn)幀率。
5.根據(jù)權(quán)利要求1所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:還包括步驟S4:當(dāng)收到關(guān)閉服務(wù)器命令時,服務(wù)器在關(guān)閉過程中,保存一次時間記錄文件; 所述步驟Si中,還包括在服務(wù)器啟動時,讀取時間記錄文件,判斷時間合法性的步驟;若合法,則執(zhí)行步驟Si,正常啟動后續(xù)步驟;若不合法,則停止執(zhí)行后續(xù)步驟,退出進(jìn)程。
6.根據(jù)權(quán)利要求5所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:所述步驟S4中,保存時間記錄文件,具體為在時間記錄文件中,標(biāo)記服務(wù)器狀態(tài)為關(guān)閉,并記錄關(guān)閉時的虛擬時間; 所述步驟SI中,判斷時間合法性的步驟具體為:當(dāng)時間記錄文件中的服務(wù)器狀態(tài)為關(guān)閉時,若當(dāng)前現(xiàn)實(shí)時間或虛擬時間大于關(guān)閉時的虛擬時間,則判斷為時間合法;否則,判斷為時間不合法。
7.根據(jù)權(quán)利要求6所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:還包括步驟S5:在程序運(yùn)行過程中,每相隔一個指定時間,更新一次時間記錄文件,把時間記錄文件中的服務(wù)器狀態(tài)標(biāo)記為運(yùn)行,并記錄當(dāng)時的虛擬時間; 所述步驟Si,判斷時間合法性的步驟還包括:當(dāng)時間記錄文件中的服務(wù)器狀態(tài)為運(yùn)行時,若當(dāng)前現(xiàn)實(shí)時間或虛擬時間減去記錄時的虛擬時間的差值大于指定時間,則判斷為時間合法;否則,判斷為時間不合法。
8.根據(jù)權(quán)利要求7所述的游戲服務(wù)端虛擬時間實(shí)現(xiàn)方法,其特征在于:所述指定時間為3-6分鐘。
【文檔編號】G06F19/00GK103678919SQ201310695034
【公開日】2014年3月26日 申請日期:2013年12月13日 優(yōu)先權(quán)日:2013年12月13日
【發(fā)明者】吳開 申請人:廣東天拓資訊科技有限公司