网狐棋牌游戏平台服务器架构设计分析[转]

本文详细介绍了基于事件驱动的数据处理模型及其在复杂系统中的应用,包括调用模型、功能模块划分、数据队列服务设计等内容,并提供了各类接口和服务引擎的设计方案。

基本设计概念和处理流程

 

调用模型

模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Function),调用方直接调用接口指针内声明的纯虚方法,而此纯虚函数的具体逻辑由该接口的派生类实现。

示意图:

 

基于事件驱动的数据处理模型

在系统功能设计中,针对网络事件SocketEvent、数据库事件DatabaseEvent、定时器事件TimerEvent……的数据处理,建立数据队列服务QueueService,为每一队列建立多个子线程QueueServiceThread处理。数据队列服务提供添加事件数据的方法AddToQueue,设置数据队列服务钩子SetQueueServiceSink,由数据队列服务钩子QueueServiceSink执行具体逻辑事件的数据处理。 示意图:

 再者,根据网络、数据库等特定功能,构建网络、数据库等管理服务,实现数据队列服务钩子QueueServiceSink方法,调度事件数据执行外部处理接口,外部处理接口具体由二次开发用户实现。

示意图:

 

事件数据设计

 

软件体系结构(架构 Architecture)设计

 

功能模块划分

 

数据队列服务QueueService模块设计

    基本设计概念

    建立一个内存链表,保存事件数据,对外部提供方法(向链表添加事件数据并通知线程,同时启动多个处理线程,从数据链表里获取事件数据,执行外部钩子方法进行处理。线程事件通知采用完成端口技术。

    类与接口设计

 

COM接口接口名接口基类接口实现类
A队列引擎IQueueServiceEngineCQueueServiceHelper
B事件服务IEventServiceCEventServiceHelper
C网络引擎ITCPSocketEngineCTCPSocketEngineHelper
D定时器引擎ITimerEngineCTimerEngineHelper
E数据库操作IDataBaseCDataBaseHelper
F数据库引擎IDataBaseEngineCDataBaseEngineHelper
I调度引擎IAttemperEngineCAttemperEngineHelper
G服务引擎IServiceEngineCServiceEngineHelper
K异步引擎IAsynchronismEngineCAsynchronismEngineHelper
 自动清理参数辅助类 CAutoCleanParameters
 自动关闭记录集辅助类 CAutoCloseRecord
 断开数据库连接辅助类 CAutoCloseDataBase
    

 

内部接口类别接口功能继承实现类
 数据队列事件 (非组件实现)CQueueServiceEvent(IQueueService、CThreadLock)设置接口、发送通知事件  
      
 数据库错误接口IADOError错误类型与描述: public IUnknownExCADOError
E数据库连接接口IDataBase数据库操作类: public IUnknownExCDataBase
 数据库钩子接口IDataBaseSink启动关闭数据库模块、数据操作处理: public IUnknownEx 
F数据库引擎接口IDataBaseEngine启动停止服务、注册钩子、获取接口: public IUnknownExCDataBaseEngine
      
A数据队列接口IQueueService加入数据: public IUnknownExCQueueService
 数据队列类钩子接口IQueueServiceSink通知回调函数: public IUnknownExCTCPSocketEngineCDataBaseEngineCAttemperEngine
A队列类引擎接口IQueueServiceEngine开始服务、停止服务、设置接口、负荷信息: public IUnknownExCQueueService
      
B事件服务引擎接口IEventService设置句柄、设置级别、事件通知: public IUnknownExCEventService
G服务引擎接口IServiceEngine服务接口、配置接口、服务查询、功能接口: public IUnknownExCServiceEngine
      
D定时器引擎接口ITimerEngine设置定时器、删除定时器: public IUnknownExCTimerEngine
D定时器引擎接口ITimerEngineManager开始服务、停止服务、设置接口: public IUnknownExCTimerEngine
      
CTCP SOCKET 引擎接口ITCPSocketEngine发送、批量发送、关闭连接、允许群发: public IUnknownExCTCPSocketEngine
CTCP SOCKET 引擎管理接口ITCPSocketEngineManager设置接口、端口、数目、启动服务、停止服务: public IUnknownExCTCPSocketEngine
C连接对象回调接口IServerSocketItemSink应答消息、读取消息、关闭消息 CTCPSocketEngine
      
 调度模块钩子接口IAttemperEngineSink管理接口、事件接口(定时器、数据库、网络应答读取关闭): public IUnknownEx 
I调度引擎接口IAttemperEngine服务管理、设置钩子、设置网络、获取接口: public IUnknownExCAttemperEngine
      
K异步引擎接口IAsynchronismEngine管理接口(启动停止服务、插入请求)、功能接口(注册钩子、取消注册): public IUnknownExCAsynchronismEngine
 异步引擎钩子接口IAsynchronismEngineSink启动事件、停止事件、异步请求: public IUnknownEx 
      

 

接口实现类别引用
 网络管理类CTCPSocketEngineCQueueService//队列对象 CServerSocketItemPtrArray CQueueServiceEvent//通知组件
 调度管理类CAttemperEngineITCPSocketEngine//网络引擎 IAttemperEngineSink//挂接接口CQueueService//队列对象
 数据库对象CDataBase_CommandPtr//命令对象 _RecordsetPtr//记录集对象 _ConnectionPtr//数据库对象
 数据库管理类CDataBaseEngineCQueueService//队列对象 IDataBaseSink//通知钩子
 事件服务类CEventService 设置句柄-bool SetRichEditHwnd(HWND); 设置级别-void ConfigEventService(...); 事件通知-void ShowEventNotify(...);
 定时器引擎CTimerEngineCTimerThread->(公共服务)
 异步引擎接口CAsynchronismEngine friend class CControlWnd; friend class CMessageThread; CControlWnd//控制窗口 CThreadLock//线程同步 CDataStorage//数据存储 CMessageThread//线程组件
 服务引擎CServiceEngineCTimerEngine定时器引擎 CDataBaseEngine数据库引擎 CAttemperEngine调度引擎 CTCPSocketEngine  网络引擎 CAsynchronismEngine 异步引擎
 数据队列类CQueueServiceCQueueServiceThread->(公共服务)
 ADO 错误类CADOError: public IADOError
    

 

内部类:

意义功能继承引用
TCP SOCKET 类CServerSocketItemSOCK对象和操作、完成端口、加密解密等  
数据队列事件CQueueServiceEvent事件通知,接口设置管理 代码级引用
窗口控制类CControlWnd//消息映射 OnAsynRequest//请求消息: public CWnd 
应答线程对象CSocketAcceptThread运行函数(WSAAccept): public CServiceThread 
读写线程类CServerSocketRSThread运行函数(GetQueuedCompletionStatus) 参数CServerSocketItem *: public CServiceThread 
检测线程类CSocketDetectThread运行函数(非阻塞)、检测m_dwTickCount: public CServiceThreadCTCPSocketEngine*//管理指针
队列线程类CQueueServiceThread运行函数(GetQueuedCompletionStatus) 参数CQueueService *: public CServiceThread 
消息线程CMessageThread运行函数(for CAsynchronismEngineSinkArray*): public CServiceThreadCAsynchronismEngine*//异步引擎
定时器线程CTimerThread运行函数(for CTimerItemPtr->GetCount();): public CServiceThreadCTimerEngine*//定时器引擎
     
数据存储类CDataStorage内存的管理 公共服务( dllimport class )
线程对象类CServiceThread线程操作管理IServiceThread公共服务( dllimport class )
事件输出类CEventTrace事件管理、通知、级别(静态类) 静态全局 IEventService 以及其他处理函数
     
类别类(非组件实现)接口(组件接口)  
数据库引擎钩子CDataBaseSinkIDataBaseSink  
调度引擎钩子CAttemperEngineSinkIAttemperEngineSink  
客户端网络引擎+钩子客户端SOCKET+=IClientSocketSinkIAsynchronismEngineSink  

 

中心服务器名字类名继承类型
 调度引擎钩子CAttemperEngineSink: public IAttemperEngineSink接口实现
 数据库引擎钩子CDataBaseSink: public IDataBaseSink接口实现
     
 中心服务类CCenterService 核心类
 配置参数CInitParamter 核心类
     
 连接信息结构CConnectItem 数据管理
 连接信息管理CConnectInfoManager 数据管理
 房间连接信息CConnectItem_GameServer: public CConnectItem数据管理
 广场连接信息CConnectItem_Plaza: public CConnectItem数据管理
     
 应用程序对象CCenterServerApp: public CWinAppMFC
 主对话框CCenterServerDlg: public CDialogMFC
 配置对话框CSystemOptionDlg: public CDialogMFC
     
登陆、大厅名字类名继承类型
 调度引擎钩子CAttemperEngineSink: public IAttemperEngineSink接口实现
 数据库引擎钩子CDataBaseSink: public IDataBaseSink接口实现
 中心连接类CCenterSocket : public IAsynchronismEngineSink,  public IClientSocketSink 接口实现
     
 登录服务类CLogonService 核心类
 配置参数CInitParamter 核心类
     
 列表管理CServerList 数据管理
 列表信息CServerListInfo 数据管理
     
 应用程序对象CLogonServerApp: public CWinAppMFC
 主对话框CLogonServerDlg: public CDialogMFC
 配置对话框CSystemOptionDlg: public CDialogMFC
     
游戏装载器名字类名继承类型
 服务参数类CServiceParameter: public CDialogMFC/核心类
 配置参数CInitParamter 核心类
     
 应用程序对象CServiceLoaderApp: public CWinAppMFC
 主对话框CServiceLoaderDlg: public CDialogMFC
 配置对话框CSystemOptionDlg: public CDialogMFC
     
游戏服务框架名字类名继承类型
 调度引擎钩子CAttemperEngineSink : public IAttemperEngineSink,  public IGameServiceFrame 接口实现
 数据库引擎钩子CDataBaseSink: public IDataBaseSink接口实现
 中心连接类CCenterSocket : public IAsynchronismEngineSink,  public IClientSocketSink 接口实现

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/p/3493399.html

6.6 服务器源代码&共享组件&数据库,包括服务器端所有组件(内核除外,现在市面上还没有6.6内核),共享组件(公共服务,界面控件,界面资源),以及全部数据库文件和脚本文件,6.6较6.5有较大改动,是学习研究的上等程序代码。 结合本人上次发布的客户端组件,即为66系统模块全部源代码!!!官方售价几万,上有人卖几百到几千不等,本程序绝对6.6新版代码(带道具),识货的下。 总共140M,7个解压包:1~7。 #ifndef KERNEL_ENGINE_HEAD_HEAD_FILE #define KERNEL_ENGINE_HEAD_HEAD_FILE ////////////////////////////////////////////////////////////////////////// //包含文件 #include #include #include #include #include //平台文件 #include "..\..\模板库\Template.h" #include "..\..\公共文件\Constant.h" #include "..\..\公共文件\GlobalDef.h" #include "..\..\共享组件\公共服务\ComService.h" ////////////////////////////////////////////////////////////////////////// //ADO 定义 #import "MSADO15.DLL" rename_namespace("ADOCG") rename("EOF","EndOfFile") using namespace ADOCG; typedef _com_error CComError; //COM 错误 typedef _variant_t CDBVarValue; //数据库数值 ////////////////////////////////////////////////////////////////////////// //导出定义 //导出定义 #ifndef KERNEL_ENGINE_CLASS #ifdef KERNEL_ENGINE_DLL #define KERNEL_ENGINE_CLASS _declspec(dllexport) #else #define KERNEL_ENGINE_CLASS _declspec(dllimport) #endif #endif //模块定义 #ifndef _DEBUG #define KERNEL_ENGINE_DLL_NAME TEXT("KernelEngine.dll") //组件 DLL 名字 #else #define KERNEL_ENGINE_DLL_NAME TEXT("KernelEngineD.dll") //组件 DLL 名字 #endif ////////////////////////////////////////////////////////////////////////// //系统常量 //常量定义 #define TIME_CELL 200 //时间单元 #define TIMES_INFINITY DWORD(-1) //无限次数 #define MAX_ASYNCHRONISM_DATA 8192 //异步数据 ////////////////////////////////////////////////////////////////////////// //网络定义 //连接错误 #define CONNECT_SUCCESS 0 //连接成功 #define CONNECT_FAILURE 1 //连接失败 #define CONNECT_EXCEPTION 2 //参数异常 //关闭原因 #define SHUT_REASON_INSIDE 0 //内部原因 #define SHUT_REASON_NORMAL 1 //正常关闭 #define SHUT_REASON_REMOTE 2 //远程关闭 #define SHUT_REASON_TIME_OUT 3 //网络超时
传资源,如有侵权请联系/留言,资源过大上传乃是下载链接的ZIP文件。 目录: ├─1javascript程序设计9 T& b/ o% ?' h G! b' Y' X/ y │ 第001课初识node_js.rar │ 第002课JS基本数据_函数对象_表_数组_字符串_函数调用.rar* H x0 z) f4 B3 { │ 第003课JS运算表达式_条件判断_循环语句_垃圾回收.rar │ 第004课JSMath函数_数组_表_字符串_常用接口.rar │ 第005课JS模块_new_类_继承.rar1 f2 V3 A& R5 x3 Z │ ├─2creator客户端游戏开发 │ 第001课初识creator.rar+ P+ m" }! v( C& I │ 第002课cc.Node(一)场景树.rar │ 第003课cc.Node(二)事件响应.rar J. G) e" Z/ O( V% m9 i │ 第004课cc.Node(三)坐标空间的换.rar │ 第005课cc.Node(四)Action的使用.rar │ 第006课cc.Component的使用详解.rar │ 第007课Sprite组件的使用详解.rar │ 第008课Button组件使用详解.rar │ 第009课Label组件使用详解.rar G5 [4 B8 `& ]/ b │ 第010课AudioSource组件的使用.rar' D' [8 n/ _) w% C1 v6 H │ 第011课动画编辑器的使用.rar$ N1 Y4 L$ J, g# L, c) x* T4 s* @ │ 第012课骨骼动画组件的使用.rar& G. _4 U0 u; U0 V: p% | │ 第013课mask_layout_scrollview组件的使用.rar {& g, [) W2 l0 b# t) M& V │ 第014课cc_loader代码加载和释放资源.rar │ 第015课cc.Widget屏幕适配.rar0 D. n! ?4 l* K; c0 R │ 第023课creator_滚动列表动态加载数据.rar │ 第024课creator_h5打包发布优化技巧_android环境搭建打包发布.rar │ 第025课creator_cc.director资源加载策略.rar │ ) L& {! H9 r5 C7 x x2 q/ z2 t5 O: [ ├─3node.js游戏服务器开发& C7 h( i* c {* D! E │ 第006课node事件循环_process模块的基本使用.rar │ 第007课TCP网络传送的基本原理.rar- K7 a" O9 M* r0 h- q h6 U │ 第008课node.js使用Net模块搭建TCPserver_client.rar │ 第009课node.js二进制数据Buffer模块.rar │ 第010课node.js_npm模块的安装和加载.rar! o O' O- ]0 G! t: R3 U │ 第011课node.js_websocketws模块使用.rar │ 第012课node.js_TCP通讯拆包封包.rar7 L5 Y4 X, V$ v# H" c$ {0 Q │ 第013课node.js_二进制数据协议JSON数据协议.rar │ 第014课node.js_http基础express_webserver搭建.rar9 [5 x$ @3 Y" v: U7 e* Z │ 第015课node.js_http_serverhttp_client_get_post编码基本流程和实现.rar# Y/ a6 M$ d8 f │ 第016课node.js_fs模块的同步异步读写.rar4 R7 X5 @# a4 v │ 第017课node.js_Base64_MD5_SHA1_Timer模块.rar │ 第018课node.js_mysql数据库的基本使用.rar4 h5 v, n; ?' t7 ^ h# Z. x │ 第019课node.js使用mysql模块编程操作数据库.rar! D& Y* ]+ t: U: }; F │ 第020课redis的搭建和基本使用.rar' c G% x. A+ e0 d- H, ^9 D& v │ 第021课noderedis编程和使用.rar/ \2 o& J% @# k1 F │ 9 I4 R$ V( {: n- b. B* Z/ B B └─4麒麟棋牌达达麻将框架设计源码分析 第001课麒麟棋牌_达达房卡麻将安装和导入使用注意事项.rar' B$ u+ j# Z) F7 N 第002课麒麟棋牌_达达麻将的底层通讯express框架socket.io.rar 第003课麒麟棋牌_达达麻将开房间流程.rar 第004课达达麻将客户端初始化流程.rar- B% H! q% ]( _+ s8 |. B 第005课达达麻将开房间.rar 第006课达达麻将的游戏流程.rar! g- h. f3 m4 G 第007课达达麻将打包发布.rar' e: p$ l* j1 K; Z1 R! ?: t: Y 第008课达达麻将语音聊天源码分析.rar 麒麟游戏达达麻将.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值