Posted on 2012-07-23 11:40
點點滴滴 閱讀(1221)
評論(0) 編輯 收藏 引用 所屬分類:
10 服務器
整個game server的并發模型
一 概述
game server至少要提供如下幾類的功能 :
1、響應客戶端請求-------WorldRunnable
2、后臺命令 -------CliRunnable
3、分布式架構(RMI等) -------MaNGOSsoapRunnable
可以看到針對這幾類功能,mangos都給予了支持。
二、WorldRunnable響應客戶端請求的并發實現
game server會提供很多服務,如組隊、加好友、交易、走路、戰斗……,從宏觀上講這些服務是同時對外提供的,另外IO操作是費時的,
必須將IO與邏輯處理分開,這樣的話一個基本的實現是這樣的:
1、開啟IO線程,所有費時的操作交由此處處理 WorldDatabase.ThreadStart();
2、利用協程來實現各個子系統,或者利用心跳來實現各個子系統的調度(不能開很多線程,線程代價太高)
三、Mangos的心跳實現
void World::Update(uint32 diff)
基本上包括幾類:
1、檢查定時器---------------時間
2、刷任務
3、維護session---------------------人物
4、全局環境更新(map、battleGround)--------地點
5、處理服務器事件------------------事件
6、其他(數據同步、后臺調試、IO回調……)
四、game server運行的機制
1、定時器觸發
2、事件觸發(松耦合)
五、典型的一種service的實現方式
1、IO協程將cammand入隊
2、worker協程 依次fetch、execute
核心數據結構是線程安全的隊列