1. 程式人生 > >網狐棋牌遊戲服務端架構設計原理

網狐棋牌遊戲服務端架構設計原理

基本設計概念和處理流程

呼叫模型

模仿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 介面實現