器及系統(tǒng),預(yù)先配置資源配置文件,讀取所述資源配置文件中的所述預(yù)設(shè)的鍵值和所述索引名稱;根據(jù)所述預(yù)設(shè)的鍵值向操作系統(tǒng)請求內(nèi)存空間創(chuàng)建共享內(nèi)存;從磁盤中將所述索弓I名稱所對應(yīng)的資源數(shù)據(jù)加載到所述共享內(nèi)存,向同一臺物理機(jī)的各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù)。同一臺物理機(jī)的各個場景服務(wù)器的進(jìn)程共享內(nèi)存從磁盤中所加載的所述資源數(shù)據(jù),所述資源數(shù)據(jù)無需被各個不同的場景服務(wù)器的進(jìn)程從磁盤中重復(fù)加載,也無需重復(fù)占用物理機(jī)給各個場景服務(wù)器所分配的物理內(nèi)存,節(jié)省物理機(jī)的內(nèi)存空間,提高物理機(jī)的利用率。
【附圖說明】
[0054]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0055]圖1為本發(fā)明一種資源數(shù)據(jù)共享方法實施例一流程圖;
[0056]圖2為本發(fā)明一種資源數(shù)據(jù)共享方法實施例二流程圖;
[0057]圖3為本發(fā)明一種資源數(shù)據(jù)共享方法實施例三流程圖;
[0058]圖4為本發(fā)明一種資源加載服務(wù)器結(jié)構(gòu)實施例四示意圖;
[0059]圖5為本發(fā)明一種場景服務(wù)器結(jié)構(gòu)實施例五示意圖;
[0060]圖6為本發(fā)明一種資源數(shù)據(jù)共享系統(tǒng)實施例六示意圖;
[0061]圖7為本發(fā)明一種資源加載服務(wù)器實施例七結(jié)構(gòu)示意圖;
[0062]圖8為本發(fā)明一種資源加載服務(wù)器實施例八結(jié)構(gòu)示意圖。
【具體實施方式】
[0063]本發(fā)明公開了一種資源數(shù)據(jù)共享方法、服務(wù)器及系統(tǒng),資源加載服務(wù)器將同一物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù)作為資源數(shù)據(jù)加載到其所創(chuàng)建的共享內(nèi)存,向所述各個場景服務(wù)器共享所述資源數(shù)據(jù),提高物理機(jī)的利用率。
[0064]下面結(jié)合附圖對本發(fā)明實施例進(jìn)行詳細(xì)說明。
[0065]實施例一
[0066]圖1為本發(fā)明一種資源數(shù)據(jù)共享方法實施例一流程圖,應(yīng)用于資源加載服務(wù)器,描述了共享內(nèi)存創(chuàng)建的方法,所述方法包括:
[0067]步驟101:預(yù)先配置資源配置文件。
[0068]所述資源配置文件包括預(yù)設(shè)的鍵值和資源數(shù)據(jù)的索引名稱,所述資源數(shù)據(jù)為同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù)。
[0069]鍵值主要是用于識別創(chuàng)建的共享內(nèi)存的,在配置文件中預(yù)先設(shè)置好鍵值作為標(biāo)識共享內(nèi)存的標(biāo)識,可以根據(jù)預(yù)設(shè)的鍵值訪問此鍵值所標(biāo)識的共享內(nèi)存。
[0070]所述資源數(shù)據(jù)為同一個物理機(jī)上的各個場景服務(wù)器的進(jìn)程所需的相同的邏輯數(shù)據(jù),包括策劃配置數(shù)據(jù)、美術(shù)資源數(shù)據(jù)和地圖資源數(shù)據(jù)等,所述資源數(shù)據(jù)為靜態(tài)只讀數(shù)據(jù)。除了資源數(shù)據(jù)以外,同一個物理機(jī)的各個場景服務(wù)器的進(jìn)程在運(yùn)行期間還需加載運(yùn)行數(shù)據(jù),所述運(yùn)行數(shù)據(jù)為動態(tài)讀寫數(shù)據(jù),各個場景服務(wù)器所需的動態(tài)數(shù)據(jù)各不相同。這里需要說明的是,各個場景服務(wù)器與資源加載服務(wù)器并不是不同的硬件服務(wù)器,各個場景服務(wù)器是位于同一個物理機(jī)上的處理不同網(wǎng)絡(luò)游戲中非全局性邏輯數(shù)據(jù)的軟件程序。資源加載服務(wù)器也是在所述物理機(jī)上創(chuàng)建共享內(nèi)存的軟件程序。
[0071]所述資源數(shù)據(jù)的索引名稱主要用于標(biāo)識所需加載的資源數(shù)據(jù),以便加載邏輯數(shù)據(jù)時,從磁盤中準(zhǔn)確的加載各個場景服務(wù)器所需的共同的邏輯數(shù)據(jù)。
[0072]步驟102:讀取所述資源配置文件中的所述預(yù)設(shè)的鍵值和所述索引名稱。
[0073]資源加載服務(wù)器讀取預(yù)設(shè)的資源配置文件中的所述預(yù)設(shè)的鍵值和所述索引名稱,資源加載服務(wù)器是指安裝在互聯(lián)網(wǎng)數(shù)據(jù)中心(Internet DataCenter, IDC)的硬件上,可以根據(jù)預(yù)設(shè)的鍵值創(chuàng)建共享內(nèi)存,并將磁盤中的資源數(shù)據(jù)加載到共享內(nèi)存的應(yīng)用程序。
[0074]步驟103:根據(jù)所述預(yù)設(shè)的鍵值向操作系統(tǒng)請求內(nèi)存空間創(chuàng)建共享內(nèi)存。
[0075]符合可移植操作系統(tǒng)接口(PortableOperating System Interface,P0SIX)標(biāo)準(zhǔn)的操作系統(tǒng)都提供了共享內(nèi)存(Shared Memory)功能,可以通過一個鍵值創(chuàng)建一塊共享內(nèi)存,當(dāng)創(chuàng)建進(jìn)程退出時,所創(chuàng)建的共享內(nèi)存不會和進(jìn)程一起刪除。創(chuàng)建好的共享內(nèi)存可以向多個進(jìn)程共享內(nèi)存中的數(shù)據(jù)。
[0076]資源加載服務(wù)器根據(jù)所讀取的資源配置文件中的預(yù)設(shè)的鍵值創(chuàng)建一個共享內(nèi)存,操作系統(tǒng)接收到資源加載服務(wù)器的請求后,給其分配一塊物理內(nèi)存空間作為共享內(nèi)存,所述共享內(nèi)存以預(yù)設(shè)的鍵值作為標(biāo)識。
[0077]步驟104:從磁盤中將所述索引名稱所對應(yīng)的資源數(shù)據(jù)加載到所述共享內(nèi)存,向同一臺物理機(jī)上的各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù)。
[0078]資源加載服務(wù)器按照從資源配置文件中所讀取的資源數(shù)據(jù)的索引名稱,將同一臺物理上的各個場景服務(wù)器的進(jìn)程所需的相同的資源數(shù)據(jù)加載到所創(chuàng)建的共享內(nèi)存。則所述資源數(shù)據(jù)從磁盤中加載一次即可,向所述物理機(jī)的各個場景服務(wù)器的進(jìn)程共享加載到共享內(nèi)存中的資源數(shù)據(jù)。
[0079]現(xiàn)有技術(shù)中,由于每個場景服務(wù)器的進(jìn)程的邏輯數(shù)據(jù)彼此相互獨(dú)立,每個場景服務(wù)器的進(jìn)程在運(yùn)行時所需的相同的邏輯數(shù)據(jù)(即資源數(shù)據(jù))都在物理機(jī)給各個場景服務(wù)器所分配的物理內(nèi)存中占有內(nèi)存空間,每個場景服務(wù)器的進(jìn)程都需要從磁盤中加載所述資源數(shù)據(jù)。所述資源數(shù)據(jù)被重復(fù)的從磁盤中加載到物理機(jī)中,假設(shè)一組資源數(shù)據(jù)所占的內(nèi)存為8G,有3個場景服務(wù)器,則現(xiàn)有技術(shù)中,各個場景服務(wù)器的進(jìn)程啟動時,每個場景服務(wù)器的內(nèi)存空間都存儲有8G的所述資源數(shù)據(jù),則所述資源數(shù)據(jù)一共占有物理機(jī)的24G的物理內(nèi)存。
[0080]而使用本發(fā)明所提供的一種資源數(shù)據(jù)共享方法,將所述資源數(shù)據(jù)從磁盤加載到共享內(nèi)存中,所述資源數(shù)據(jù)只需要加載一次即可,并且只占用物理機(jī)的8G的物理內(nèi)存空間,與現(xiàn)有技術(shù)相比,節(jié)省了 16G的物理內(nèi)存空間,并且減少了相同的資源數(shù)據(jù)從磁盤中的加載次數(shù)。共享內(nèi)存中的資源數(shù)據(jù)可以向3個場景服務(wù)器的進(jìn)程共享。節(jié)省出的物理內(nèi)存空間可以部署更多的場景服務(wù)器,提高游戲服務(wù)器邏輯數(shù)據(jù)的處理能力。
[0081]進(jìn)一步的,向各個場景服務(wù)器的進(jìn)程共享所述資源數(shù)據(jù)具體實現(xiàn)方式為:
[0082]當(dāng)各個場景服務(wù)器的進(jìn)程通過所述預(yù)設(shè)的鍵值訪問所述共享內(nèi)存時,將所述資源數(shù)據(jù)映射到各個場景服務(wù)器的內(nèi)存空間。
[0083]各個場景服務(wù)器的進(jìn)程可以根據(jù)預(yù)設(shè)的鍵值訪問所述鍵值所標(biāo)識的共享內(nèi)存,共享內(nèi)存中的所述資源數(shù)據(jù)會映射到各個場景服務(wù)器的內(nèi)存空間,各個場景服務(wù)器的進(jìn)程可以從其內(nèi)存空間中讀取所述資源數(shù)據(jù)。由于所述資源數(shù)據(jù)從所述共享內(nèi)存中映射到各個場景服務(wù)器的內(nèi)存空間,并不占用各個場景服務(wù)器的物理內(nèi)存空間,這樣可以節(jié)省物理機(jī)的物理內(nèi)存空間。
[0084]可選的,從磁盤中將所述索引名稱所對應(yīng)的資源數(shù)據(jù)加載到所述共享內(nèi)存后,還包括:
[0085]設(shè)置一個信號量并創(chuàng)建與所述信號量對應(yīng)的信號量鍵值,所述信號量的初始值與所述物理機(jī)上所運(yùn)行的場景服務(wù)器的進(jìn)程的個數(shù)相同;
[0086]將所述信號量根據(jù)所述信號量鍵值存儲至操作系統(tǒng)的內(nèi)存空間,以便所述各個場景服務(wù)器的進(jìn)程根據(jù)所述信號量鍵值從所述操作系統(tǒng)的內(nèi)存空間檢測所述信號量,當(dāng)所述信號量存在,且對所述信號量執(zhí)行wait操作成功后,執(zhí)行進(jìn)程啟動。
[0087]資源加載服務(wù)器設(shè)置的信號量的初始值與所述物理機(jī)上所運(yùn)行的場景服務(wù)器的進(jìn)程的個數(shù)相同,同時創(chuàng)建一個與所述信號量對應(yīng)的信號量鍵值,根據(jù)所述信號量鍵值向操作系統(tǒng)請求內(nèi)存空間存儲所述信號量。信號量鍵值是所述信號量存儲的內(nèi)存空間的標(biāo)識,可以根據(jù)所述信號量鍵值可以訪問所存儲的信號量。
[0088]各個場景服務(wù)器的進(jìn)程會從所述資源加載服務(wù)器獲得所述信號量鍵值,每隔一段時間,根據(jù)所述信號量鍵值檢測所述信號量,當(dāng)所述信號量存在,對所述信號量執(zhí)行wait操作成功后,執(zhí)行進(jìn)程啟動。Wait操作是操作系統(tǒng)的一個通用操作指令,對所述信號量執(zhí)行wait操作,是對信號量執(zhí)行減I的操作,并返回所述信號量不為O的響應(yīng),各個場景服務(wù)器接收到所述信號量不為O的響應(yīng)時,執(zhí)行進(jìn)程啟動。當(dāng)所有場景服務(wù)器的進(jìn)程都啟動后,所述信號量為0,此時無法檢測到信號量。
[0089]這種方法可以實現(xiàn)各個場景服務(wù)器的進(jìn)程在共享內(nèi)存加載所述資源數(shù)據(jù)后再進(jìn)行啟動,各個場景服務(wù)器的進(jìn)程才能通過預(yù)設(shè)的鍵值訪問共享內(nèi)存中的所述資源數(shù)據(jù),實現(xiàn)先加載資源數(shù)據(jù)再訪問資源數(shù)據(jù)的先后執(zhí)行