一種資源數(shù)據(jù)共享方法、服務(wù)器及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,特別是涉及一種資源數(shù)據(jù)共享方法、服務(wù)器及系統(tǒng)。
【背景技術(shù)】
[0002]網(wǎng)絡(luò)游戲服務(wù)器是指與網(wǎng)絡(luò)游戲客戶端相對應(yīng),安裝在互聯(lián)網(wǎng)數(shù)據(jù)中心(Internet Data Center,IDC)的硬件上,為網(wǎng)絡(luò)游戲客戶端提供數(shù)據(jù)轉(zhuǎn)發(fā)與邏輯處理服務(wù)的程序。經(jīng)典的網(wǎng)絡(luò)游戲服務(wù)器包括一個總控服務(wù)器與多個場景服務(wù)器。其中,場景服務(wù)器主要處理網(wǎng)絡(luò)游戲中非全局性的邏輯數(shù)據(jù),處理不同的局部場景游戲邏輯數(shù)據(jù)。
[0003]隨著計算機(jī)技術(shù)的發(fā)展,一臺物理機(jī)可以配備多個CPU核心,多核CPU的應(yīng)用,推動了數(shù)據(jù)并行計算的發(fā)展,進(jìn)而提高了網(wǎng)絡(luò)游戲服務(wù)器的邏輯數(shù)據(jù)處理能力。理論上,一臺物理機(jī)可以部署與CPU核心數(shù)量相同的場景服務(wù)器。當(dāng)多個場景服務(wù)器進(jìn)程啟動時,每個場景服務(wù)器向操作系統(tǒng)請求一個物理內(nèi)存,各個場景服務(wù)器從磁盤將各自所需的邏輯數(shù)據(jù)加載到所分配的物理內(nèi)存。在場景服務(wù)器運行時,從其物理內(nèi)存中讀取運行所需的邏輯數(shù)據(jù)進(jìn)行處理,每個場景服務(wù)器所加載的邏輯數(shù)據(jù)之間相互獨立。
[0004]對于同一個網(wǎng)絡(luò)游戲來說,不同的場景服務(wù)器所加載的邏輯數(shù)據(jù)中,都包含有策劃配置數(shù)據(jù)、美術(shù)資源數(shù)據(jù)與地圖資源數(shù)據(jù)等多種相同的邏輯數(shù)據(jù)。在這種情況下,上述各個場景服務(wù)器都包含的相同的邏輯數(shù)據(jù)會被每個場景服務(wù)器從磁盤中加載到各自的物理內(nèi)存中存儲,這樣就導(dǎo)致相同的邏輯數(shù)據(jù)被重復(fù)加載,并占用多個物理內(nèi)存,造成物理內(nèi)存大量浪費,降低了物理機(jī)的利用率。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明提供了一種資源數(shù)據(jù)共享方法、服務(wù)器及系統(tǒng),資源加載服務(wù)器將同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù)作為資源數(shù)據(jù)加載到其所創(chuàng)建的共享內(nèi)存,向各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù),節(jié)省物理機(jī)的物理內(nèi)存。
[0006]本發(fā)明實施例第一方面提供了一種資源數(shù)據(jù)共享方法,應(yīng)用于資源加載服務(wù)器,預(yù)先配置資源配置文件,所述資源配置文件包括預(yù)設(shè)的鍵值和資源數(shù)據(jù)的索引名稱,所述資源數(shù)據(jù)為同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù),所述方法包括:
[0007]讀取所述資源配置文件中的所述預(yù)設(shè)的鍵值和所述索引名稱;
[0008]根據(jù)所述預(yù)設(shè)的鍵值向操作系統(tǒng)請求內(nèi)存空間創(chuàng)建共享內(nèi)存;
[0009]從磁盤中將所述索引名稱所對應(yīng)的資源數(shù)據(jù)加載到所述共享內(nèi)存,向同一臺物理機(jī)上的各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù)。
[0010]本發(fā)明實施例第一方面的第一種可能的實施方式中,所述向各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù)包括:
[0011]當(dāng)各個場景服務(wù)器的進(jìn)程通過所述預(yù)設(shè)的鍵值訪問所述共享內(nèi)存時,將所述資源數(shù)據(jù)映射到各個場景服務(wù)器的內(nèi)存空間。
[0012]本發(fā)明實施例第一方面的第二種可能的實施方式中,所述從磁盤中將所述索引名稱所對應(yīng)的資源數(shù)據(jù)加載到所述共享內(nèi)存后還包括:
[0013]設(shè)置一個信號量并創(chuàng)建與所述信號量對應(yīng)的信號量鍵值,所述信號量的初始值與所述物理機(jī)上所運行的場景服務(wù)器的進(jìn)程的個數(shù)相同;
[0014]將所述信號量根據(jù)所述信號量鍵值存儲至操作系統(tǒng)的內(nèi)存空間,以便所述各個場景服務(wù)器的進(jìn)程根據(jù)所述信號量鍵值從所述操作系統(tǒng)的內(nèi)存空間檢測所述信號量,當(dāng)所述信號量存在,且對所述信號量執(zhí)行wait操作成功后,執(zhí)行進(jìn)程啟動。
[0015]結(jié)合本發(fā)明實施例第一方面至第一方面的第二種可能的實施方式,在第三種可能的實施方式中,所述資源數(shù)據(jù)包括:
[0016]策劃配置數(shù)據(jù)、美術(shù)資源數(shù)據(jù)和地圖資源數(shù)據(jù)。
[0017]本發(fā)明實施例第二方面提供了一種資源數(shù)據(jù)共享方法,應(yīng)用于各個場景服務(wù)器,所述方法包括:
[0018]執(zhí)行進(jìn)程啟動;
[0019]讀取資源加載服務(wù)器預(yù)先配置的資源配置文件中的所述預(yù)設(shè)的鍵值,所述資源配置文件包括預(yù)設(shè)的鍵值和資源數(shù)據(jù)的索引名稱,所述資源數(shù)據(jù)為同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù);
[0020]根據(jù)所述預(yù)設(shè)的鍵值訪問共享內(nèi)存,所述共享內(nèi)存是所述資源加載服務(wù)器根據(jù)所述預(yù)設(shè)的鍵值向操作系統(tǒng)請求內(nèi)存空間創(chuàng)建的,所述共享內(nèi)存存儲有所述資源加載服務(wù)器根據(jù)所述索引名稱從磁盤中加載的所述資源數(shù)據(jù);
[0021 ] 將所述共享內(nèi)存中的所述資源數(shù)據(jù)映射到內(nèi)存空間。
[0022]本發(fā)明實施例第二方面第一種可能的實施方式中,所述執(zhí)行進(jìn)程啟動包括:
[0023]接收啟動指令,執(zhí)彳丁進(jìn)程啟動。
[0024]本發(fā)明實施例第二方面第二種可能的實施方式中,所述執(zhí)行進(jìn)程啟動包括:
[0025]從所述資源加載服務(wù)器獲得信號量鍵值;
[0026]每隔預(yù)定時間根據(jù)所述信號量鍵值從操作系統(tǒng)的內(nèi)存空間檢測所述信號量;
[0027]當(dāng)所述信號量存在,且對所述信號量執(zhí)行wait操作成功后,執(zhí)行進(jìn)程啟動。
[0028]本發(fā)明實施例第三方面提供了一種資源加載服務(wù)器,所述服務(wù)器包括:
[0029]配置單元,用于預(yù)先配置資源配置文件,所述資源配置文件包括預(yù)設(shè)的鍵值和資源數(shù)據(jù)的索引名稱,所述資源數(shù)據(jù)為同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù);
[0030]第一讀取單元,用于讀取所述資源配置文件中的所述預(yù)設(shè)的鍵值和所述索引名稱;
[0031]創(chuàng)建單元,用于根據(jù)所述預(yù)設(shè)的鍵值向操作系統(tǒng)請求內(nèi)存空間創(chuàng)建共享內(nèi)存;
[0032]共享單元,用于從磁盤中將所述索引名稱所對應(yīng)的資源數(shù)據(jù)加載到所述共享內(nèi)存,向同一臺物理機(jī)上的各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù)。
[0033]本發(fā)明實施例第三方面第一種可能的實施方式中,
[0034]所述共享單元,具體用于當(dāng)各個場景服務(wù)器的進(jìn)程通過所述預(yù)設(shè)的鍵值訪問所述共享內(nèi)存時,將所述資源數(shù)據(jù)映射到各個場景服務(wù)器的內(nèi)存空間。
[0035]本發(fā)明實施例第三方面第二種可能的實施方式中,所述服務(wù)器還包括:
[0036]設(shè)置單元,用于設(shè)置一個信號量并創(chuàng)建與所述信號量對應(yīng)的信號量鍵值,所述信號量的初始值與所述物理機(jī)上所運行的場景服務(wù)器的進(jìn)程的個數(shù)相同;
[0037]存儲單元,用于將所述信號量根據(jù)所述信號量鍵值存儲至操作系統(tǒng)的內(nèi)存空間,以便所述各個場景服務(wù)器的進(jìn)程根據(jù)所述信號量鍵值從所述操作系統(tǒng)的內(nèi)存空間檢測所述信號量,當(dāng)所述信號量存在,且對所述信號量執(zhí)行wait操作成功后,執(zhí)行進(jìn)程啟動。
[0038]本發(fā)明實施例第四方面提供了一種場景服務(wù)器,所述服務(wù)器包括:
[0039]啟動單元,用于執(zhí)行進(jìn)程啟動;
[0040]第二讀取單元,用于讀取所述資源加載服務(wù)器預(yù)先配置的資源配置文件中的所述預(yù)設(shè)的鍵值,所述資源配置文件包括預(yù)設(shè)的鍵值和資源數(shù)據(jù)的索引名稱,所述資源數(shù)據(jù)為同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù);
[0041]訪問單元,用于根據(jù)所述預(yù)設(shè)的鍵值訪問共享內(nèi)存,所述共享內(nèi)存是所述資源加載服務(wù)器根據(jù)所述預(yù)設(shè)的鍵值向操作系統(tǒng)請求內(nèi)存空間創(chuàng)建的,所述共享內(nèi)存存儲有資源加載服務(wù)器根據(jù)所述索引名稱從磁盤中加載的所述資源數(shù)據(jù);
[0042]映射單元,用于將所述共享內(nèi)存中的所述資源數(shù)據(jù)鏡像到內(nèi)存空間。
[0043]本發(fā)明實施例第四方面第一種可能的實施方式中,所述啟動單元包括:
[0044]接收子單元,用于接收啟動指令;
[0045]第一啟動子單元,用于執(zhí)行進(jìn)程啟動。
[0046]本發(fā)明實施例第四方面第二種可能的實施方式中,所述啟動單元包括:
[0047]獲取子單元,用于從所述資源加載服務(wù)器獲得信號量鍵值;
[0048]檢測子單元,用于每隔預(yù)定時間根據(jù)所述信號量鍵值從操作系統(tǒng)的內(nèi)存空間檢測所述信號量;
[0049]第二啟動子單元,用于當(dāng)所述信號量存在,且對所述信號量執(zhí)行wait操作成功后,執(zhí)行進(jìn)程啟動。
[0050]本發(fā)明實施例第五方面提供了一種資源數(shù)據(jù)共享系統(tǒng),
[0051]所述系統(tǒng)包括本發(fā)明實施例第三方面至第三方面第二種可能的實現(xiàn)方式所述的資源加載服務(wù)器以及本發(fā)明第四方面至第四方面第二種可能的實施方式所述的場景服務(wù)器。
[0052]由上述內(nèi)容可知,本發(fā)明有如下有益效果:
[0053]本發(fā)明提供了一種資源數(shù)據(jù)共享方法、服務(wù)