當遊戲服務端啟動時,服務端會根據配置檔案中的資訊,載入各個遊戲邏輯處理模組的動態鏈結庫,然後呼叫模組的
dllcreate
函式對模組進行初始化。
配置檔案可以像下面這樣:
modulecount = 30
module1 = battlesys
module2 = equipsys
module3 = friendsys
module4 = shopsys
module5 = skilllsys ……
模組中dllcreate
函式的原型可能像這樣:
imodule* dllcreate()
函式的返回值是
imodule
介面類的指標,這個介面類是每個遊戲邏輯處理模組都需要提供的,並且在每個模組中都會有個繼續自
imodule
介面類的具體類
cmodule
。返回的
imodule
將被儲存到遊戲邏輯管理類
clogicmanager
中。std::mapmapallmodule;
等載入完全部的模組後,就呼叫
imodule::init
函式。偽碼如下:
foreachimodule* pin mapallmodule
p->init((ilogicmanager*)this);
這個時候每個模組的初始化函式都將被呼叫,在初始化函式中,每個模組向
ilogicmanager
中註冊自己感興趣的訊息編號
,並且儲存到
ilogicmanager
的std::hash_multimapmapmsghandler;
完成初始化工作之後,每當服務端的網路模組收到訊息後,會把訊息傳遞給
ilogicmanager
。然後ilogicmanager
在mapmsghandler
找到相關的
imodule;
imodule::recvmessage(msg* pmsg,player* pplayer);
每個模組都將在
cmodule:: recvmessage
中收到自己感興趣的訊息。然後可以根據
msg中的
typeid
生成相應的訊息處理器
c***handler
,然後處理訊息.
遊戲服務端開發 一
資料儲存伺服器 遊戲中的資料大致分為靜態配置資料和動態的玩家資料。這裡主要討論玩家資料儲存的解決方案。雖然遊戲應用的寫操作要多於讀操作,但是加入快取層仍然有其必要性。多個應用伺服器啟動時從資料庫讀取資料會在瞬間給資料庫造成巨大壓力,如果將相對靜態的資料以檔案的形式放在應用伺服器本地,可以避免這個問題...
遊戲服務端開發 二
應用伺服器的設計 上 應用伺服器的工作有 0 同步廣播玩家的行為 1作為第三方對玩家個體和玩家之間互動行為計算,並將計算結果推送到資料儲存系統 2驅動遊戲中的 npc 3作為乙個特殊的遊戲參與者,與玩家相互作用。應用伺服器最重要的工作莫過於同步廣播玩家之間的行為,使玩家之間能夠互視,多人同時遊戲才有...
遊戲服務端開發 隨想
最近公司上線了一款遊戲,後台服務端出現各種bug,我簡單的將出現的問題做了分類,多執行緒操作的資料一致性bug,邏輯bug,流程bug。雖然感覺這樣分並不能完全表述出現的bug型別,但我認為至少是這三類問題能概括了目前出現的bug.於是大家一起 了怎麼在上線環境來定位bug的問題所在。其實,我想更應...