zoukankan      html  css  js  c++  java
  • 网狐棋牌游戏平台服务器架构设计分析[转]

    http://blog.csdn.net/weiwangchao_/article/details/7047044

    基本设计概念和处理流程

     

    调用模型

    模仿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 接口实现
  • 相关阅读:
    Java后端面试题大汇总,冲刺金三银四
    面试官:小伙子,Mybatis的本质和原理说一下
    面试官问:大量的 TIME_WAIT 状态 TCP 连接,对业务有什么影响?怎么处理?
    便捷搭建 Zookeeper 服务器的方法,好用,收藏~
    10 个冷门但又非常实用的 Docker 使用技巧
    mitmproxy 抓包工具(1)
    基于alpine创建Scrapy镜像
    强大的输入框-应用快速启动uTools
    Interceptor、Filter、Servlet的区别
    利用三层判断sql数据库中编码是否已经存在(个人拙作,不喜勿喷)
  • 原文地址:https://www.cnblogs.com/qilinzi/p/3493399.html
Copyright © 2011-2022 走看看