游戲服務器端引擎--DogSE的設計


DogSE的設計目標來說,它定位為千人左右的頁游服務器,在不修改任何底層模塊的情況下可以快速的寫各種游戲業務。就算是新人在熟悉2~3天后也可以開始寫一個游戲。

項目可以從github獲得,訪問地址:https://github.com/dogvane/DogSE

 

1.DogSE的基本結構

 

 

 

對於一個游戲再代碼層面可以分為3個部分

1.與所有游戲無關的代碼(DogSECoreLibrary 項目)

2.特定游戲類型的基礎代碼

3.具體游戲相關的業務代碼

 

對於DogSE來說,它所完成的任務就是與游戲無關的底層代碼,在第二階段,會根據不同的游戲類型,補充一些特定游戲的基礎代碼,這些基礎代碼是已例子的方式提供,真正在用引擎開發時,只需要根據具體的游戲類型,選擇對應的例子,並再這個基礎上進行快速開發。

 

2.DogSE一些組件的設計

2.1 網絡層設計

 網絡層主要由2個對象組成ListenerClientSession,當Listener開啟監聽后,當有socket發起連接后,會觸發SocketConnect的事件。事件里面會帶有一個ClientSession的對象用來區分每個客戶端。這里采用模板,可以對每個客戶端綁定一個指定類型的業務邏輯數據。目前這個T是消息包處理的NetSate對象。

 

2.2 消息包處理

消息包處理目前Core只提供了一個Byte讀和寫的基本類(PacketReader和 PacketWriter),后期根據不同項目的需求,可以采用不同的解析協議。DogSE默認用自定義的二進制流讀寫,后面將試着支持googleprotobuf,以及一些其它的交換數據(json,xml

 

 

 

2.3 任務隊列

任務隊列游戲運轉的核心,任務分為網絡任務(NetTask)和非網絡任務(ActionTaskParamActionTask),網絡任務主要是客戶端發起的請求,而非網絡任務可能是某些定時回調的任務,一些異步任務的回調。PacketHander主要負責網絡消息id對具體業務邏輯綁定。

 

 

2.4 時間調度

 時間調度會開啟一個線程監測當前時間調度隊列里的TimeSlice對象是否達到執行要求。達到觸發要求,會向TaskManager里添加一個ActionTask對象,用來執行對應的游戲業務邏輯。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM