就DogSE的設計目標來講,它定位爲千人左右的頁遊服務器,在不修改任何底層模塊的狀況下能夠快速的寫各類遊戲業務。就算是新人在熟悉2~3天后也能夠開始寫一個遊戲。git
項目能夠從github得到,訪問地址:https://github.com/dogvane/DogSEgithub
1.DogSE的基本結構json
對於一個遊戲再代碼層面能夠分爲3個部分服務器
1.與全部遊戲無關的代碼(DogSE的Core和Library 項目)網絡
2.特定遊戲類型的基礎代碼異步
3.具體遊戲相關的業務代碼socket
對於DogSE來講,它所完成的任務就是與遊戲無關的底層代碼,在第二階段,會根據不一樣的遊戲類型,補充一些特定遊戲的基礎代碼,這些基礎代碼是已例子的方式提供,真正在用引擎開發時,只須要根據具體的遊戲類型,選擇對應的例子,並再這個基礎上進行快速開發。google
2.DogSE一些組件的設計spa
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對象,用來執行對應的遊戲業務邏輯。