網狐棋牌遊戲服務端架構設計原理
阿新 • • 發佈:2018-12-11
基本設計概念和處理流程
呼叫模型
模仿COM元件介面模式,利用面向物件思想多型性polymorphism,呼叫方儲存著被呼叫方的基礎介面指標(interface or sink鉤子)(Pure Virtual Function),呼叫方直接呼叫介面指標內宣告的純虛方法,而此純虛擬函式的具體邏輯由該介面的派生類實現。
示意圖:
基於事件驅動的資料處理模型
在系統功能設計中,針對網路事件SocketEvent、資料庫事件DatabaseEvent、定時器事件TimerEvent……的資料處理,建立資料佇列服務QueueService,為每一佇列建立多個子執行緒QueueServiceThread處理。資料佇列服務提供新增事件資料的方法AddToQueue,設定資料佇列服務鉤子SetQueueServiceSink,由資料佇列服務鉤子QueueServiceSink執行具體邏輯事件的資料處理。 示意圖:
再者,根據網路、資料庫等特定功能,構建網路、資料庫等管理服務,實現資料佇列服務鉤子QueueServiceSink方法,排程事件資料執行外部處理介面,外部處理介面具體由二次開發使用者實現。
示意圖:
事件資料設計
軟體體系結構(架構 Architecture)設計
功能模組劃分
資料佇列服務QueueService模組設計
基本設計概念
建立一個記憶體連結串列,儲存事件資料,對外部提供方法(向連結串列新增事件資料並通知執行緒,同時啟動多個處理執行緒,從資料鏈表裡獲取事件資料,執行外部鉤子方法進行處理。執行緒事件通知採用完成埠技術。
類與介面設計
COM介面 | 介面名 | 介面基類 | 介面實現類 |
A | 佇列引擎 | IQueueServiceEngine | CQueueServiceHelper |
B | 事件服務 | IEventService | CEventServiceHelper |
C | 網路引擎 | ITCPSocketEngine | CTCPSocketEngineHelper |
D | 定時器引擎 | ITimerEngine | CTimerEngineHelper |
E | 資料庫操作 | IDataBase | CDataBaseHelper |
F | 資料庫引擎 | IDataBaseEngine | CDataBaseEngineHelper |
I | 排程引擎 | IAttemperEngine | CAttemperEngineHelper |
G | 服務引擎 | IServiceEngine | CServiceEngineHelper |
K | 非同步引擎 | IAsynchronismEngine | CAsynchronismEngineHelper |
自動清理引數輔助類 | CAutoCleanParameters | ||
自動關閉記錄集輔助類 | CAutoCloseRecord | ||
斷開資料庫連線輔助類 | CAutoCloseDataBase |
內部介面 | 類別 | 介面 | 功能 | 繼承 | 實現類 |
資料佇列事件 (非元件實現) | CQueueServiceEvent (IQueueService、CThreadLock) | 設定介面、傳送通知事件 | |||
資料庫錯誤介面 | IADOError | 錯誤型別與描述 | : public IUnknownEx | CADOError | |
E | 資料庫連線介面 | IDataBase | 資料庫操作類 | : public IUnknownEx | CDataBase |
資料庫鉤子介面 | IDataBaseSink | 啟動關閉資料庫模組、資料操作處理 | : public IUnknownEx | ||
F | 資料庫引擎介面 | IDataBaseEngine | 啟動停止服務、註冊鉤子、獲取介面 | : public IUnknownEx | CDataBaseEngine |
A | 資料佇列介面 | IQueueService | 加入資料 | : public IUnknownEx | CQueueService |
資料佇列類鉤子介面 | IQueueServiceSink | 通知回撥函式 | : public IUnknownEx | CTCPSocketEngine CDataBaseEngine CAttemperEngine | |
A | 佇列類引擎介面 | IQueueServiceEngine | 開始服務、停止服務、設定介面、負荷資訊 | : public IUnknownEx | CQueueService |
B | 事件服務引擎介面 | IEventService | 設定控制代碼、設定級別、事件通知 | : public IUnknownEx | CEventService |
G | 服務引擎介面 | IServiceEngine | 服務介面、配置介面、服務查詢、功能介面 | : public IUnknownEx | CServiceEngine |
D | 定時器引擎介面 | ITimerEngine | 設定定時器、刪除定時器 | : public IUnknownEx | CTimerEngine |
D | 定時器引擎介面 | ITimerEngineManager | 開始服務、停止服務、設定介面 | : public IUnknownEx | CTimerEngine |
C | TCP SOCKET 引擎介面 | ITCPSocketEngine | 傳送、批量傳送、關閉連線、允許群發 | : public IUnknownEx | CTCPSocketEngine |
C | TCP SOCKET 引擎管理介面 | ITCPSocketEngineManager | 設定介面、埠、數目、啟動服務、停止服務 | : public IUnknownEx | CTCPSocketEngine |
C | 連線物件回撥介面 | IServerSocketItemSink | 應答訊息、讀取訊息、關閉訊息 | CTCPSocketEngine | |
排程模組鉤子介面 | IAttemperEngineSink | 管理介面、事件介面(定時器、資料庫、網路應答讀取關閉) | : public IUnknownEx | ||
I | 排程引擎介面 | IAttemperEngine | 服務管理、設定鉤子、設定網路、獲取介面 | : public IUnknownEx | CAttemperEngine |
K | 非同步引擎介面 | IAsynchronismEngine | 管理介面(啟動停止服務、插入請求)、功能介面(註冊鉤子、取消註冊) | : public IUnknownEx | CAsynchronismEngine |
非同步引擎鉤子介面 | IAsynchronismEngineSink | 啟動事件、停止事件、非同步請求 | : public IUnknownEx |
介面實現 | 類別 | 類 | 引用 |
網路管理類 | CTCPSocketEngine | CQueueService//佇列物件 CServerSocketItemPtrArray CQueueServiceEvent//通知元件 | |
排程管理類 | CAttemperEngine | ITCPSocketEngine//網路引擎 IAttemperEngineSink//掛接介面CQueueService//佇列物件 | |
資料庫物件 | CDataBase | _CommandPtr//命令物件 _RecordsetPtr//記錄集物件 _ConnectionPtr//資料庫物件 | |
資料庫管理類 | CDataBaseEngine | CQueueService//佇列物件 IDataBaseSink//通知鉤子 | |
事件服務類 | CEventService | 設定控制代碼-bool SetRichEditHwnd(HWND); 設定級別-void ConfigEventService(...); 事件通知-void ShowEventNotify(...); | |
定時器引擎 | CTimerEngine | CTimerThread->(公共服務) | |
非同步引擎介面 | CAsynchronismEngine | friend class CControlWnd; friend class CMessageThread; CControlWnd//控制視窗 CThreadLock//執行緒同步 CDataStorage//資料儲存 CMessageThread//執行緒元件 | |
服務引擎 | CServiceEngine | CTimerEngine定時器引擎 CDataBaseEngine資料庫引擎 CAttemperEngine排程引擎 CTCPSocketEngine 網路引擎 CAsynchronismEngine 非同步引擎 | |
資料佇列類 | CQueueService | CQueueServiceThread->(公共服務) | |
ADO 錯誤類 | CADOError | : public IADOError |
內部類:
意義 | 類 | 功能 | 繼承 | 引用 |
TCP SOCKET 類 | CServerSocketItem | SOCK物件和操作、完成埠、加密解密等 | ||
資料佇列事件 | CQueueServiceEvent | 事件通知,介面設定管理 | 程式碼級引用 | |
視窗控制類 | CControlWnd | //訊息對映 OnAsynRequest//請求訊息 | : public CWnd | |
應答執行緒物件 | CSocketAcceptThread | 執行函式(WSAAccept) | : public CServiceThread | |
讀寫執行緒類 | CServerSocketRSThread | 執行函式(GetQueuedCompletionStatus) 引數CServerSocketItem * | : public CServiceThread | |
檢測執行緒類 | CSocketDetectThread | 執行函式(非阻塞)、檢測m_dwTickCount | : public CServiceThread | CTCPSocketEngine*//管理指標 |
佇列執行緒類 | CQueueServiceThread | 執行函式(GetQueuedCompletionStatus) 引數CQueueService * | : public CServiceThread | |
訊息執行緒 | CMessageThread | 執行函式(for CAsynchronismEngineSinkArray*) | : public CServiceThread | CAsynchronismEngine*//非同步引擎 |
定時器執行緒 | CTimerThread | 執行函式(for CTimerItemPtr->GetCount();) | : public CServiceThread | CTimerEngine*//定時器引擎 |
資料儲存類 | CDataStorage | 記憶體的管理 | 公共服務( dllimport class ) | |
執行緒物件類 | CServiceThread | 執行緒操作管理 | IServiceThread | 公共服務( dllimport class ) |
事件輸出類 | CEventTrace | 事件管理、通知、級別(靜態類) | 靜態全域性 IEventService 以及其他處理函式 | |
類別 | 類(非元件實現) | 介面(元件介面) | ||
資料庫引擎鉤子 | CDataBaseSink | IDataBaseSink | ||
排程引擎鉤子 | CAttemperEngineSink | IAttemperEngineSink | ||
客戶端網路引擎+鉤子 | 客戶端SOCKET+=IClientSocketSink | IAsynchronismEngineSink |
中心伺服器 | 名字 | 類名 | 繼承 | 型別 |
排程引擎鉤子 | CAttemperEngineSink | : public IAttemperEngineSink | 介面實現 | |
資料庫引擎鉤子 | CDataBaseSink | : public IDataBaseSink | 介面實現 | |
中心服務類 | CCenterService | 核心類 | ||
配置引數 | CInitParamter | 核心類 | ||
連線資訊結構 | CConnectItem | 資料管理 | ||
連線資訊管理 | CConnectInfoManager | 資料管理 | ||
房間連線資訊 | CConnectItem_GameServer | : public CConnectItem | 資料管理 | |
廣場連線資訊 | CConnectItem_Plaza | : public CConnectItem | 資料管理 | |
應用程式物件 | CCenterServerApp | : public CWinApp | MFC | |
主對話方塊 | CCenterServerDlg | : public CDialog | MFC | |
配置對話方塊 | CSystemOptionDlg | : public CDialog | MFC | |
登陸、大廳 | 名字 | 類名 | 繼承 | 型別 |
排程引擎鉤子 | CAttemperEngineSink | : public IAttemperEngineSink | 介面實現 | |
資料庫引擎鉤子 | CDataBaseSink | : public IDataBaseSink | 介面實現 | |
中心連線類 | CCenterSocket | : public IAsynchronismEngineSink, public IClientSocketSink | 介面實現 | |
登入服務類 | CLogonService | 核心類 | ||
配置引數 | CInitParamter | 核心類 | ||
列表管理 | CServerList | 資料管理 | ||
列表資訊 | CServerListInfo | 資料管理 | ||
應用程式物件 | CLogonServerApp | : public CWinApp | MFC | |
主對話方塊 | CLogonServerDlg | : public CDialog | MFC | |
配置對話方塊 | CSystemOptionDlg | : public CDialog | MFC | |
遊戲裝載器 | 名字 | 類名 | 繼承 | 型別 |
服務引數類 | CServiceParameter | : public CDialog | MFC/核心類 | |
配置引數 | CInitParamter | 核心類 | ||
應用程式物件 | CServiceLoaderApp | : public CWinApp | MFC | |
主對話方塊 | CServiceLoaderDlg | : public CDialog | MFC | |
配置對話方塊 | CSystemOptionDlg | : public CDialog | MFC | |
遊戲服務框架 | 名字 | 類名 | 繼承 | 型別 |
排程引擎鉤子 | CAttemperEngineSink | : public IAttemperEngineSink, public IGameServiceFrame | 介面實現 | |
資料庫引擎鉤子 | CDataBaseSink | : public IDataBaseSink | 介面實現 | |
中心連線類 | CCenterSocket | : public IAsynchronismEngineSink, public IClientSocketSink | 介面實現 |