网狐棋牌游戏平台服务器架构设计分析[转]
网狐棋牌游戏平台服务器架构设计分析[转]
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 | 接口实现 |
网狐棋牌游戏平台服务器架构设计分析[转]相关推荐
- 网狐棋牌游戏平台服务器架构设计分析
调用模型 模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interface or sink钩子)(Pure Virtual Functio ...
- 网狐棋牌客户端连接服务器修改方法6,网狐游戏服务器 客户端连接
网狐游戏服务器 客户端连接 内容精选 换一换 本章节指导您使用MongoDB客户端和Robo 3T工具,通过公网连接副本集实例.用户可以直接操作副本集主节点和备节点.主节点用于读写请求,您可以连接主节 ...
- 网狐棋牌客户端连接服务器修改方法
在游戏客户端文件夹中找到 Resource文件夹 -> Script文件夹 -> HNScriptValue.xml
- 网狐棋牌经典版管理后台操作手册
网狐棋牌_经典版游戏 管理后台操作手册 管理平台概述: i. 使用说明: 本手册是提供给运营商阅读使用,帮助 ...
- 关于网狐棋牌6603源码的整理、编译和搭建
最近换工作,趁着有一段清闲时间,整理了一下网狐棋牌的源码,这份源码下载很久了,一直呆在硬盘.这次正好好好看看. 网狐的代码质量很高,流露出来的代码也比较完整,基本上都能编译通过.但是要真的搭建起来,还 ...
- 浅谈棋牌游戏开发框架之架构
浅谈棋牌游戏开发框架之架构 关键字: 棋牌游戏 架构 框架 开发 发表文章 摘要:现在来和大家分享下怎么架构和实现框架来满足棋牌游戏需求的.一.原型符合棋牌项目框架,快速换皮,快速融合.多渠道多包体. ...
- 基于JSF框架的在线棋牌游戏平台
一.项目总体说明 1.1 项目总体说明 该项目是基于JSF框架的在线棋牌游戏平台,目前有五子棋和象棋两项已完成子模块,皆支持人机对战与在线匹配对战,其中象棋还支持大部分棋牌平台不支持的复盘功能.项目 ...
- 关于网狐棋牌的数据库
前不久放出了我自己整理的网狐棋牌的源码,下载的网友反应都不错,只是不少同学都找我要数据库,最近一直没时间,今天趁放假的时间把数据库放出来,分享给大家. 关于网狐棋牌6603源码的整理.编译和搭建 数据 ...
- 基于滴滴云的棋牌游戏服务端架构设计
现在小团队开发的棋牌游戏有很多,棋牌行业的相互攻击是非常普遍的现象,同行之间往往会采取 DDOS.CC 等攻击的手段来打击对手,这是目前棋牌运营商们面临的比较严峻的一个问题,那么在设计棋牌游戏服务端架 ...
最新文章
- 深度学习必备---用Keras和直方图均衡化---数据增强
- js 点击最后一个 和倒数第二个_期货及期权品种的最后交易日,您都了解吗?...
- 前段react技术架构图_基于 React 的可视化编辑平台实践
- 关于Oracle Developer 的 DBMS_OUTPUT.PUT_LINE 输出问题
- IP-guard应用攻略:如何防范外置网卡泄密
- h700通话糊 索尼wi_专业的事还是要交给专业的人,盘点索尼千元以下的好耳机...
- iOS回顾笔记( 01 )-- XIB和纯代码创建应用的对比
- [置顶] Android adb root权限
- PyTorch并行与分布式(四)Distributed Data Papallel
- c#中一般处理程序中使用session
- 在cmd指令看计算机位数,如何判断电脑是32位还是64位
- leetcode79 word serach 解题报告
- iPad 3发布在即,各平板优势大比拼
- unity:瞄准镜制作
- IPv6安装和配置方法,IPv6资源汇总
- 测试基础 之 黑盒测试方法
- 【C语言】scanf函数格式控制符
- 个人开发者App Store收款
- 哈工大 2021春 计算机系统 大作业程序人生
- 嵌入式linux--电子相册
热门文章
- VC所有版本一键清除缓存垃圾脚本
- 语音识别技术的前世今生【前世篇】
- 电脑服务器修改穿越火线不卡,windows10玩穿越火线画面不流畅怎么办
- 安排几款实用的内网穿透工具+教程
- 面试题:重写equals方法为什么通常会重写hashcode方法?
- R语言随机森林报错The response has five or fewer unique values. Are you sure you want to do regression原因及解决办法
- BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型
- 无人机自动悬停的秘密
- python中excel数据分组处理
- Oracle学习——第二讲(函数)