当前课程知识点:游戏程序设计 > 第十七章 《游戏逻辑服务器和反外挂》 > 17.1 游戏逻辑服务器(上) > 17.1 游戏逻辑服务器(上)
大家好
我先自我介绍一下我叫赵永伟
在腾讯里面的英文名叫winson
下面我来给大家带来这个游戏逻辑
服务器反外挂的一个课程的分享
今天的课程主要是分成三个部分
第一个部分
我首先会讲一下游戏逻辑服务器
这一部分第一部分因为它是一个和计算机
程序比较
偏计算器程序专业的一个主题
所以我到时候讲的时候
如果涉及到一些
计算机程序方面的问题的概念的话
我先简单的说明一下
我就希望大家都能够很好的能够理解到
我一会讲到的内容
第二部分
我会讲一下外挂与反外挂
最后就是一个答疑环节
这个就像我接触过了MMRPG
阴阳师
逆水寒
这些都是网易的都是是腾讯的
今天我们主要是以这款游戏御龙在天
这一款游戏来进行讲解
这一款游戏可以说是天美工作室
自研的首款MMORPG游戏
它以三国为题材的2012年上线
我们先来看一看
这个御龙在天是一款怎样的游戏
第一部分游戏逻辑服务器
首先我来说一下
这个这图都在大家能看到吗
下面椭圆的我们在这客户端
客户端大家不用说了
就是我们再在电脑上打开了那个游戏客户端
下载在手机上打开游戏app进入客户端
这个两个椭圆形的
在上面的是
这是矩形的
就是在各个游戏机房里面
默默为各个游戏服务的游戏服务器模块
例如这边左边鉴权服务器是什么
就我们登陆用的
在腾讯就是什么QQ
微信登陆用的
然后这边是版本服务器版本服务器什么了
看到这个大家都很熟悉了版本更新
版本服务器
然后目录服务器
目录服务器是什么呢,就是选区,这个就是选区的界面
这个目录服务器
但是左右两边
这个都不是今天重点
你们要看到我这里用的虚线
虚线画出来意思说
他们鉴权和更新的版本
选了区之后
他们就会断开了
就是一个短暂的临时的一个服务
中间这一块才是最重要的比如说
客户端登录到具体的游戏里面
真正起作用的就是中间的这个模块
一般中间这个游戏服务器
我们会一般都会做成三层
底层叫链接层
链接层它是负责管理和客户端的网络连接
客户端发送来的请求包
它负责解包、解密
然后保留一个完整的消息
传送到这个逻辑服务器来处理
然后逻辑服务器处理完之后
他把一个消息往下发
发到链接层
链接层会给它解密
解密打包以后发给客户端
它就是链接层所管理所做的事情
然后这个游戏数据库就是存储层
那么我们可以概括一下
游戏服务器主要有什么作用呢
第一存储刚才说了
存储就不用说的
第二
与其他玩家的一个中转
例如A玩家A和玩家B在里面打架
那肯定要通过一个中转服务器
互相中转才我能看到你出招
你也看到我出招
或者我看到你在跑步或者你再跑或者
你在做什么我都能看到
就说也要通过服务器中转
第三就是它还要负责玩法的驱动
和逻辑怎么说呢
例如那个比武大会
今晚八点钟开始干嘛
那么
逻辑服务器较复杂
八点钟的时候要发通知给大家开始啦
大家来报名
它负责通知大家报名
判断哪个玩家有资格报名
要扣钱进入
然后比赛的结果胜负发奖是吧
都是这个逻辑服务器来处理的工作
然后最后一条就是反外挂和防作弊
不过大家注意一下
反外挂和防作弊并不是说
所有服务器都有这个功能的
例如韩国
韩国的服务器例如韩国的游戏
因为在韩国
它上网是实名制的
所以在韩国
他用挂在韩国网游用挂那成本就很高了
所以韩国的可以让那些没有外挂了
所以韩国游戏它基本上
都不在服务器做逻辑
它很多都把那个逻辑就放在客户端
例如客户端说我把他打了
服务器相信了或者
我把这批怪都杀死了服务器相信了
它就直接
相信你客户端发上来的结果我就相信了
但是在国内做游戏这样是不行的
在国内
这游戏如果这样的话
这游戏没办法运行
没办法运营了
肯定死掉的
所以在国内服务做游戏
他第一个我们第一个原则就是
不能相信客户端的数据
我们所有关键的计算都由服务器来做
所以
我们可以认为
服务器是游戏的大脑,存储加运算,这就是大脑的功能
所以就是大脑的功能
我们认为是服务器是一个游戏大脑
我现在就开始重点来讲
这个逻辑服务器
逻辑服务器好像是一个很高大上的东西
但是并不是他其实做的东西
很简单
第一它初始化
首先进行启动的时候
它只能执行初始化的工作
就是我要该读的配置
该初始化的工作例如加载的文件它读进来
然后它以后他就会一直在进行一个死循环
它不停的在收消息
收了消息
然后再看看这个消息是哪个模块注册了
例如可能是一个很多模块
例如我没们有走路
战斗
复活
什么国家玩法相关的操作
可能它有很多模块注册了
我就分发给你
你这个系统给处理处理完
那就发给客户端会广播出去
然后不停的战术就消息不停的处理
但是它除了收消息之外
它中间还有个中断
每一百毫秒会中断一次
进行时间的驱动
就是我刚才说的
几点钟有个什么比武大会
它就是要靠这个时间中断
中断不停的检查
看看这个时间到了
到了它就开始相关的逻辑
以及信号处理信号处理
例如
例如我发个信号给它(逻辑服务器)
让它重新加载一下配置 配置发出去后
例如我们发现这个配置有bug
或者修正了一把配置
配置发出去了
我发个信号给它(逻辑服务器)
它就会重新执行下这个读配置的操作
把配置重新加载进来
在不停的不停的进行
它的这个逻辑
其实服务器它做的东西就是这么多
好了那么
今天的课题
那这样就还有这么多的一个系统
那今天的课题主要
讲哪些内容呢
我这里有一个例子
我们就举一个这个例子
以这个例子来展开讲
这个例子是这样的
是一个A玩家向B玩家跑过去
他跑过去把他打死了
然后他就在身上掉落了一些箱子
我就把它捡了
就是以这么一个
这样的一个例子来进行讲解
那这个例子里面
我会将解到以下的各个各个内容点
第一我会讲一下游戏对象是怎么管理的呢
首先
我刚才说到了里面有人英雄
有拿着武器
有马
有别人掉落的箱子
这些其实都是在游戏服务器里面
它是一个怎么样的存在的就是这些对象
第二我会讲解一下
在游戏后台
它的地图是怎样描述的
以及他怎样管理它
他地图上了一些
它地图上有哪些玩家
怎么管理它上面的玩家
以后我会讲一下视野管理
其实刚才上节课朱老师也讲到有
视野管理的这些概念
以后会讲玩家在后台玩家的移动
在后台是一个怎么样的逻辑
并且讲一下玩家之间的相互攻击
以及物品的掉落和拾取
我先来讲一下
游戏对象管理
在游戏里面
我们一般会用一个actor的类
它来表示一下具有生命的类
然后你看它有个XYZ
就是表示它的坐标
它由v表示玩家的速度
有HP表示它的血量例如它的方法
move表示它运动
然后我们刚才的player
这就是我们的英雄
英雄就是从刚才的actor类
派生出来了一个更特别的类
假设这里记录了背包的一个数组
他身上有哪些背包
然后还有个就是背包的一个类
然后它会派生出一些例如EquipBag
在刚才的游戏里面,EquipBag就是装备包
装备包就是你穿在身上的那些装备
就是拿着这剑拿着剑穿的衣服
戴的防甲之类的,就是存在装备包里面
你存在装备包里面的东西
就是你已经生效的东西
然后这个PopBag就是玩家的那个背包
就是一个可以随身放东西的
一个背包
一个BoxBag
就是我们刚才看到的一个掉落的箱子
BoxBag就是用来辅助实现掉落的逻辑的
一会我会讲
物品我们在游戏里面
我们分成了一个道具和装备两类
为什么要分两类呢
就是因为他们有些属性是不一样的
有些方法不一样的例如道具
我们一些血瓶
回城符
道具他用了之后他就消失了
而且用的时候它会产生一定的效果
它就以后就就把它扣掉
然后但是装备不一样
装备它用了之后才是穿到身上去
穿到Equipbig
然后然后它就身上会有一些加成
一些要属性加成之类的
所以我们因为它们两个有共同的属性
所以它们都从item里面派生出来
但是他们有很大的操作上有很大的差异
所以
它们又分别生成两个不同的一个类
我说一下
各个类之间是一个怎样的一个关系
你看一下英雄
这是玩家身上他有个数组
就是记录下他有哪些背包
这些背包上面都会记录着
我这个背包里面有哪些物品
我背包上面放了哪些物品
而这些物品就是这些它们其实关联起来
就是这个找到这个或者这个
这个根据这个数组
在找到找到对应的物品是这样
其实这些就是在服务器后台
在逻辑服务器里面
他们就是以这样一个类的对象方式存在
然后我们是使用内存池的方式来管理
各种游戏对象了
其实刚才上一节课
朱老师最后那时候讲共享内存池的时候
共享内存的时候有讲到
这些就是我们一般的的游戏都会这样
启动的时候
我会分配一大块共享内存
只可能就就是十几个G
还可能要把这个内存划分成不同的类别
有这一块用来存玩家了
这一块用来存NPC的
这一块是用来储存物品呢
这样就分成不同的类别
然后呢
然后就是
隔开一个格子
你那大家就分呗
就在里面存着了
为什么要共享内存呢
刚才朱老师要有说到了
就是程序崩溃的时候就是崩溃的时候
共享内存不会被回收
重新拉起的时候
你关联到共享内存上面去
你就这款游戏可以继续恢复完
另外一点就是
因为我们做服务器有时候经常会发现
有些bug或者有些要调整数值
又调整了我们需要热更一下
什么叫热更就是不停机更新
不停机更新
我们就是让进程很快的
重启一遍
它那么这些对象全都给恢复回来
那玩家不会掉线
就是这个原理
就是我们就是用了内存池
-1. 1什么是游戏(上)
--选择题
-1.2 什么是游戏(下)
--选择题
-1.3 游戏是如何开发出来的
-1.4 游戏引擎(上)
-1.5 游戏引擎(下)
--单选题
-1.6 如何成为一个游戏开发者
--多选题
-2.1 什么是游戏服务器
--单选题
-2.2 游戏服务器的和分类发展
--单选题
-2.3 核心技术和实现难点
--单选题
-2.4 设计原理与方法论
--单选题
-3.1 三维坐标系统
--多选题
-3.2 向量与运算
--单选题
-3.3 矩阵与线性变换
--双选题
-3.4 四元数
--3.4 四元数
--多选题
-4.1 游戏循环概述(上)
--多选题
-4.2 游戏循环概述(下)
--单选题
-4.3 《无尽之路》的实现
--单选题
-4.4 支撑游戏的功能
--选择题
-4.5 支撑游戏的机制与系统
--多选题
-5.1 基本介绍
--5.1 基本介绍
--单选题
-5.2 随机数生成器
--单选题
-5.3 随机数分布与应用
--单选题
-6.1 什么是游戏玩法开发
--单选题
-6.2 建立愿景 Vision
--单选题
-6.3 划定边界 Scope
-6.4 迭代 Iteration
--单选题
-6.5 迭代 Iteration+抛光Polish
--单选题
-7.1实时图形渲染管道 宏观渲染系统
--单选题
-7.2实时图形渲染管道 应用阶段
--单选题
-7.3实时图形渲染管道 几何阶段
--单选题
-7.4实时图形渲染管道 光栅化阶段
--单选题
-7.5实时图形渲染管道 总结 参考
-8.1 物理回顾1
--单选题
-8.2 物理回顾2
--单选题
-8.3 材质 1
--8.3 材质 1
-8.4 材质 2
--8.4 材质 2
-8.5 材质3
--8.5 材质3
-8.6局部光照
--8.6局部光照
--单选题
-8.7 全局光照
--8.7 全局光照
--单选题
-9.1 动画介绍
--9.1 动画介绍
--多选题
-9.2 游戏动画介绍
-9.3 动画技术类型
--多选题
-9.4 骨骼蒙皮动画
--多选题
-9.5 动画流水线
--多选题
-9.6 动画前沿趋势
--多选题
-10.1 .基本概念
--多选题
-10.2 设计目标
--多选题
-10.3 传输数据分析
--多选题
-10.4 常用同步方案 1
-10.4 常用同步方案 2
-10.4 常用同步方案 3
-10.4 常用同步方案 4
--多选题
-10.5 方案对比
--多选题
-11.1 基本图元
--单选题
-11.2 图元距离(上)
--单选题
-11.2 图元距离(下)
--单选题
-11.3 图元相交测试+ 其他几何方法
--单选题
-12.1 著名物理引擎介绍
--单选题
-12.2 物理引擎原理(上)
--单选题
-12.3 物理引擎原理(下)
--单选题
-12.4 游戏中的物理体
--单选题
-12.5 物理引擎使用入门
--单选题
-13.1开发语言
--13.1开发语言
--单选题
-13.2 开发环境
--单选题
-13.3 腾讯开发组件介绍
--单选题
-13.4 网络通信+业务框架介绍
--多选题
-14.1 进程间通信(上)
-14.2 进程间通信(下)
-14.3 通信格式
-14.4 并发模型
-14.5 超时处理
-14.6 大系统小做(上)
--多选题
-14.7 大系统小做(下)
-14.8 架构层面的技术支持(上)
--单选题
-14.9 架构层面的技术支持(下)
-14.10 分布系统的关键能力
--多选题
-15.1 游戏人工智能综述
-15.2 人工智能在游戏中主要方法 上
--多选题
-15.3人工智能在游戏中主要方法 (下)
-15.4 人工智能在游戏制作中的应用领域1
--多选题
-15.5 人工智能在游戏制作中的应用领域2
-15.6 人工智能在游戏制作中的应用领域3
--多选题
-15.7 人工智能在游戏运营中的应用实践(上)
-15.8 人工智能在游戏运营中的应用实践(下)
--多选题
-16.1 游戏支撑系统(1)
--单选题
-16.2 游戏支撑系统(2)
--单选题
-16.3 游戏支撑系统(3)
--单选题
-16.4 游戏支撑系统(4)
--单选题
-16.5 游戏支撑系统(5)
-17.1 游戏逻辑服务器(上)
--单选题
-17.1 游戏逻辑服务器(下)
-17.2 外挂与反外挂(上)
-17.2 外挂与反外挂(下)
--多选题
-18.1运行环境
--18.1运行环境
--多选题
-18.2物理部署
--18.2物理部署
--多选题
-18.3系统的可运维性
--多选题
-18.4运维案列分析
--多选题