就DogSE的設計目標來說,它定位為千人左右的頁游服務器,在不修改任何底層模塊的情況下可以快速的寫各種游戲業務。就算是新人在熟悉2~3天后也可以開始寫一個游戲。
項目可以從github獲得,訪問地址:https://github.com/dogvane/DogSE
1.DogSE的基本結構
對於一個游戲再代碼層面可以分為3個部分
1.與所有游戲無關的代碼(DogSE的Core和Library 項目)
2.特定游戲類型的基礎代碼
3.具體游戲相關的業務代碼
對於DogSE來說,它所完成的任務就是與游戲無關的底層代碼,在第二階段,會根據不同的游戲類型,補充一些特定游戲的基礎代碼,這些基礎代碼是已例子的方式提供,真正在用引擎開發時,只需要根據具體的游戲類型,選擇對應的例子,並再這個基礎上進行快速開發。
2.DogSE一些組件的設計
2.1 網絡層設計
網絡層主要由2個對象組成Listener和ClientSession,當Listener開啟監聽后,當有socket發起連接后,會觸發SocketConnect的事件。事件里面會帶有一個ClientSession的對象用來區分每個客戶端。這里采用模板,可以對每個客戶端綁定一個指定類型的業務邏輯數據。目前這個T是消息包處理的NetSate對象。
2.2 消息包處理
消息包處理目前Core只提供了一個Byte讀和寫的基本類(PacketReader和 PacketWriter),后期根據不同項目的需求,可以采用不同的解析協議。DogSE默認用自定義的二進制流讀寫,后面將試着支持google的protobuf,以及一些其它的交換數據(json,xml)
2.3 任務隊列
任務隊列游戲運轉的核心,任務分為網絡任務(NetTask)和非網絡任務(ActionTask,ParamActionTask),網絡任務主要是客戶端發起的請求,而非網絡任務可能是某些定時回調的任務,一些異步任務的回調。PacketHander主要負責網絡消息id對具體業務邏輯綁定。
2.4 時間調度
時間調度會開啟一個線程監測當前時間調度隊列里的TimeSlice對象是否達到執行要求。達到觸發要求,會向TaskManager里添加一個ActionTask對象,用來執行對應的游戲業務邏輯。