游戏服务器——中心服
一、中心服介绍
中心服用于应用统一调度中心和数据脚本发放中心。
一 服务器信息调度:DB Server第一个启动,随后中心服启动,中心服启动前会和DB Server进行连接,之后其他服务器(网关服、登陆服、广场服、游戏服、Web Server)启动前都会和中心进行连接,当中心服收到别的服务器连接时,会将新连接的服务器信息广播给所以已经连接的服务器。网关服务器就是通过中心服广播的(网关服、登陆服、广场服、游戏服、Web Server)信息在必要的时候和他们进行连接。
二 数据脚本发放:网站后台配置修改同步之后,网站会通知Web Server,Web Server 会将需要同步数据id发给中心服,中心服去DB中重新读取配置,并给配置发送给广场服/游戏服。
二、服务器启动流程
1、启动准备
- 初始化网络库
- 监听事件注册
2、开始启动
- 创建日志、定时器
- 创建网络监听服务并启动监听
- 挂接逻辑事件(用户线程读取网络数据 )
- 创建DB服代理服务(连DB服并进行消息交互)
- 加载插件
- 创建守护中心(与守护中心服连接,用于服务器拉起)
3、启动流程图
4、补充说明
1、2.5中【加载插件】中心服目前只有一个配置读取插件,由于读取游戏相关的各种配置,并将其发送给广场服/游戏服
三、中心服与其他服务器之间消息交互
- 中心服成功启动
- 其他服务器(网关服、登陆服、广场服、游戏服、Web Server)启动时会主动连中心服,连接成功之后,会将自己的服务器信息发生给网关服。
- 网关服收到新连接服务器信息之后会将该信息广播给所以连接的客户端(其他服务器)当后台配置同步时,后台网站会将更新的配置id,通过Web Server转发给中心服,中心服去DB取对应配置,并转发给需要服务器。
- 当有服务器启动并向中心服发送登录信息时,中心服会将该服务器需要的配置信息发生给该服务器。
四、类图
可以将网关服划分为四个模块。
4.1 DB服客户端代理
4.1.1 功能
- 与DB服进行连接
- 将中心服需要执行的db请求通过DB服客户端代理发送给DB服(DB服执行db请求,并返回结果)
- 接收DB服发送回来的db请求执行结果,并将结果转发给对应接收返回结果的接口
4.1.2 类
VersibuleClient:和db服连接,将db请求发送给db服,接收db请求返回结果,并转发返回结果给对应接口
接口定义:
4.2 DB服客户端代理
4.2.1 功能
- 接收客户端连接(网关服、登录服、广场服、游戏服、Web服)。
- 保存其他服务器连接成功发送过来的服务器信息,并为新连接的服务器设置唯一的服务器id。
- 将其他服务器信息发送给新连接的服务器,并将新连接成功的服务器信息广播给已经连接成功的服务器。
- 服务器之间消息转发。
4.2.2 类
CConectionEventHandler:中心服会为每一个连接对象创建一个CConectionEventHandler对象,并记录连接服务器信息。CConectionEventHandler用于和连接的客户端进行通信,当收到登录消息会将已经连接的所有服务器信息发生给新连接的客户端,并将新连接的服务器消息广播给所有连接的服务器。
4.3 插件
4.3.1 功能
- 一个插件负责一个功能模块
- 支持插件添加和删除
- 每个插件都继承一个通用的IPlugin接口,以及各个模块根据自己的需求定义的接口(例如:IDBConfigPlugin)。
- IPlugin接口中定义客户端连接通知、db返回等接口函数用于插件可能需要用到的常见处理逻辑。
4.3.2 类
- PluginItem:用于记录插件信息(插件名称、句柄、插件指针),通过添加或删除插件id枚举对插件添加或删除。
- IPlugin:每个插件都必须继承的接口,定义有一些通用方法接口
- IDBConfigPlugin:这是一个具体插件接口,它会继承IPlugin,并定义该插件自己需要的接口。
- CDBConfigPlugin:这是一个具体的插件,用于读取后台配置,并将配置发送给需要的服务器。
接口定义:
4.4 配置读取和分发
4.4.1 功能
- 中心服启动会向数据库请求所有配置信息,并将配置发送给需要的服务器
- 当收到其他服务器连接,会将这个服务器需要的配置发送给它
- 当收到网站配置刷新请求,会重新请求需要刷新的配置,并将最新的配置发送给需要的服务器
这是CDBConfigPlugin插件中管理配置功能。
4.4.2 类
- IConfig:配置接口
- CConfigBase<CONFIGTYPE type>:公共方法:创建和发送
- 各种配置类:用于具体配置读取和发送给需要的服务器。
接口定义:
游戏服务器——中心服相关推荐
- Redis在游戏服务器中的应用
https://www.cnblogs.com/agent-k/p/Redis.html Redis在游戏服务器中的应用 Agent`K 最近在使用Redis,忽然发现以前很多费神的事情都迎刃而解了, ...
- 怎样修改游戏服务器里的数据库,修改游戏服务器中的数据库
修改游戏服务器中的数据库 内容精选 换一换 业界对备份一致性的定义包括如下三类:不一致备份:备份的文件.磁盘不在同一个时间点.崩溃一致性备份:崩溃一致性备份会捕获备份时磁盘上已存在的数据,文件/磁盘数 ...
- 修改游戏服务器中的数据,修改游戏服务器中的数据库
修改游戏服务器中的数据库 内容精选 换一换 业界对备份一致性的定义包括如下三类:不一致备份:备份的文件.磁盘不在同一个时间点.云备份中的云服务器备份提供对弹性云服务器和裸金属服务器的基于多云硬盘一致性 ...
- 游戏服务器中常见的数据一致性问题分析
什么是一致性问题 在游戏服务器的开发中,我们经常会碰到所谓"一致性"问题,以及碰到各种为了解决这种问题所做的"方案",那么,什么是一致性问题呢?其实非常简单,就 ...
- 什么鬼?我能通过依赖混淆攻击在 Halo 游戏服务器中执行命令,微软不 care?!...
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 研究员可以利用依赖混淆攻击在 Halo Microsoft 服务器中执行命令,但微软安全响应中心 (MSRC) 表示并非问题. 神秘依赖关 ...
- 「游戏」游戏服务器中AOI的原理及四叉树实现
前言 要不是想起来这篇文章想写一个关于游戏服务器开发过程中关于AOI相关的文章,我都差不点忘了我是一个游戏服务器开发人员
- 游戏服务器中pvp、pve、rppvp、ffa-pvp的含义
最近看mangos源码,在登录服务器部分,遇到几个服务器类型的缩写,让我这个非玩家出身的人困惑了一阵,现列举出来: pvp: 玩家对玩家.就系在争夺中领土可以随意攻击敌对阵营玩家.不论级数 pve: ...
- 游戏服务器中多人交互逻辑业务的思考
背景:在mmo中有非常多的多人交互逻辑,比如:工会中帮主同时同意N个人加入帮派,此时,要检查所有人是否加入了帮派,如果没加入,则让它加入,但是有可能这一批人同时也申请了别的帮派,别的帮派的帮主也在做这 ...
- 如何正确关闭游戏服务器
一,如何正确的关闭游戏服务器 1,最简单粗爆的方法 在Linux系统上,使用ps -aux|grep java 可以查到所有运行的java程序的pid,即进程号,然后使用kill - 9 进程号,杀死 ...
最新文章
- mysql 行自动增量为23,Mysql Innodb:自动增量非主键
- mybatis pagehelper实现分页
- 重入锁:ReentrantLock 详解
- 电气期刊论文实现:热电联产经济调度【有代码】
- java添加按钮点击事件_如何为odoo 10中的按钮点击事件添加一个java脚本处理程序?...
- 201521123061 《Java程序设计》第三周学习总结
- 编译器和链接器的任务是什么
- Linux(debian7)操作基础(四)之CPU频率调整
- jQuery EasyUI combobox多选及赋值
- MySQL数据库(九) 一一 处理重复和SQL注入
- Sound Ventures斥资百万美元举行NFT竞赛活动
- 【Java】【Fulme】Flume-NG源代码阅读之SpoolDirectorySource
- There is insufficient memory for the Java Runtime Environment to continue.
- 1Password 7:Mac的密码管理工具
- Form表单只提交field的值,而不进行页面跳转
- 张晨北京科技大学计算机,混合群智能优化算法研究及应用
- MAXWELL软件的初步使用
- 聚合支付服务商“利楚扫呗”完成5000万元A轮融资 富友集团领投
- 【转载】【常见缺陷分析技术】基于ODC的软件缺陷度量研究
- FPGA学习汇总(六)----数码管显示(1)