Server 框架設計思路分享
框架模型如下:
Server部分分為四部分:Access接入層、Dispatcher事件分發層、BusinessLogic業務處理層、Data資料層
Access接入層:
供客戶端接入
Dispatcher事件分發層:
從各類事件請求Server(Event.Request) ------> 轉發------>相應的事件處理Server(Event.Response)
BusinessLogic業務處理層:
處理相應的業務邏輯
Data資料層:
處理資料
問題一:怎麼從一個Server轉發到另外一個Server?
1.Access.BusinessLogic,Data三層對應Server向Dispatcher註冊(讓Dispatcher知道你是誰)
2.EventMsg傳遞的時候帶上EventMsg.src_type 與Event.src_serverid , 帶上EventMsg.dst_type 與 EventMsg.dst_serverid 以及其它資訊,知道你從哪裡來,要到哪裡去
問題二:怎麼平滑無縫更新一個Server?
1.對於互動極少的Server.殺程序重啟程序即可。如一個配置服務
2.對於快速處理事件的Server ,新程序替換舊程序 , 新老程序同時存在若干秒 (此時新程序處理新事件;舊程序不可以處理新事件,處理完舊事件後退出)。如一個使用者儲存Server
3.對於還在互動,並且將持續互動較久的程序,1.強制不接收新指令,待裡面使用者所有行為完成後退出 2.給個定時器,如最長10分鐘,之後強制退出。在滿足1.2情況之一重啟新程序即可。如一個棋牌類的玩牌Server
問題三:Server是否可以複用?
比如開發棋牌類遊戲,做好了一個德州撲克,再來個鬥牛,再來個扎金花。。。形成模板複用,開發起來很簡單吧
問題四:Server如何實現負載均衡?
1.對於接入層,客戶端隨機接入即可;
2.對於業務邏輯或者資料層,則增加同類型server,分散處理.
問題五:如何處理時間複雜度高的業務?
交個子執行緒處理,處理完後返還給主執行緒。
......
優點:
1.將業務子系統,子模組化,各個模組之間耦合降到最小,相互之間影響降到最小。
2.平滑無縫升級,升級不影響其它模組功能
3.業務和儲存分離
4.某些Server可以模板化,複用程度高。