网狐棋牌游戏平台服务器架构设计分析
调用模型
模仿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 |
接口实现 |
- 上一篇关于网狐棋牌6603源码的整理、编译和搭建
- 下一篇网狐棋牌(一) ServerKernel中的IQueueService接口分析
网狐棋牌游戏平台服务器架构设计分析相关推荐
- 网狐棋牌游戏平台服务器架构设计分析[转]
网狐棋牌游戏平台服务器架构设计分析[转] http://blog.csdn.net/weiwangchao_/article/details/7047044 基本设计概念和处理流程 调用模型 模仿CO ...
- 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接
网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...
- 网狐棋牌客户端连接服务器修改方法
在游戏客户端文件夹中找到 Resource文件夹 -> Script文件夹 -> HNScriptValue.xml
- 网狐棋牌经典版管理后台操作手册
网狐棋牌_经典版游戏 管理后台操作手册 管理平台概述: i. 使用说明: 本手册是提供给运营商阅读使用,帮助 ...
- 关于网狐棋牌6603源码的整理、编译和搭建
最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘.这次正好好好看看. 网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过.但是要真的搭建起来,还 ...
- 浅谈棋牌游戏开发框架之架构
浅谈棋牌游戏开发框架之架构 关键字: 棋牌游戏 架构 框架 开发 发表文章 摘要:现在来和大家分享下怎么架构和实现框架来满足棋牌游戏需求的.一.原型符合棋牌项目框架,快速换皮,快速融合.多渠道多包体. ...
- 基于JSF框架的在线棋牌游戏平台
一.项目总体说明 1.1 项目总体说明 该项目是基于JSF框架的在线棋牌游戏平台,目前有五子棋和象棋两项已完成子模块,皆支持人机对战与在线匹配对战,其中象棋还支持大部分棋牌平台不支持的复盘功能.项目 ...
- 关于网狐棋牌的数据库
前不久放出了我自己整理的网狐棋牌的源码,下载的网友反应都不错,只是不少同学都找我要数据库,最近一直没时间,今天趁放假的时间把数据库放出来,分享给大家. 关于网狐棋牌6603源码的整理.编译和搭建 数据 ...
- 基于滴滴云的棋牌游戏服务端架构设计
现在小团队开发的棋牌游戏有很多,棋牌行业的相互攻击是非常普遍的现象,同行之间往往会采取 DDOS.CC 等攻击的手段来打击对手,这是目前棋牌运营商们面临的比较严峻的一个问题,那么在设计棋牌游戏服务端架 ...
最新文章
- c# 任务栏托盘图标鼠标进入MouseEnter和鼠标离开MouseLeave实现
- 【机器学习】一文读懂层次聚类(Python代码)
- gview java_java - 如何在干净模式下运行eclipse? 如果我们这样做会发生什么?
- opencv 通过网络连接工业相机_Raspberry Pi上的OpenVINO,OpenCV和Movidius NCS
- matlab 常用m文件,MATLAB基础课程 第三章 M文件知识(4)
- 英伟达驱动怎么设置显示帧数?
- 【NodeJS】20 koa 企业级Cms内容管理系统-XMind功能分析、ERStudio设计数据库ER图
- 结构体定义 typedef struct LNode 用法说明
- for循环判定质数合数
- 常用的背景色、文字颜色
- VMware安装Kali2021虚拟机
- Chrome 内置翻译翻译失败解决
- 聊聊kafka consumer offset lag increase异常
- python中numpy数组形状和计算
- Not All Carrots Are Orange
- PHP - 2021年终总结
- Sun公司的操作系统:Solaris简介
- mysql统计个数_mysql查询统计数量
- HTML5中canvas画图之画圆形
- 石榴算法1.0——打击买卖超链
热门文章
- 常用的函数式接口_Predicate接口_默认方法ornegate
- SpringBoot 读取资源文件
- JAVA中ListIterator和Iterator详解与辨析
- html的属性与css的属性,HTML的属性和css基础
- 深入理解Kafka(4)-主题与分区
- android flux 与mvp,使用 MVP 时在设计上的考量
- b站2020用户画像_B站2020年度动画大选来袭!论引战,还是要看B站!
- if-else运用及技巧(C# 参考)
- 关于myeclipse buildpath的jar包不能复制到tomcat lib下的问题
- Windows下Oracle的下载与安装