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

DogSE的設計目標來講,它定位爲千人左右的頁遊服務器,在不修改任何底層模塊的狀況下能夠快速的寫各類遊戲業務。就算是新人在熟悉2~3天后也能夠開始寫一個遊戲。git

項目能夠從github得到,訪問地址:https://github.com/dogvane/DogSEgithub

 

1.DogSE的基本結構json

 

 

 

對於一個遊戲再代碼層面能夠分爲3個部分服務器

1.與全部遊戲無關的代碼(DogSECoreLibrary 項目)網絡

2.特定遊戲類型的基礎代碼異步

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

 

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

 

2.DogSE一些組件的設計spa

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對象,用來執行對應的遊戲業務邏輯。

 

相關文章
相關標籤/搜索