热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

调用模型模仿COM组件接口模式,利用面向对象思想多态性polymorphism,调用方保存着被调用方的基础接口指针(interfaceorsi


调用模型

模仿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
接口实现

推荐阅读
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • UML 包图
    什么是包包可直接理解为命名空间,文件夹,是用来组织图形的封装,包图可以用来表述功能组命名空间的组织层次。•在面向对象软件开发的视角中&#x ... [详细]
  • iwanttowriteasimpleAppforme(Android).Forthisitisnecessarythattheservercansenddat ... [详细]
author-avatar
周俊瑶zjy_963
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有