当前课程知识点:游戏程序设计 > 第十三章 《开发工具 》 > 13.2 开发环境 > 13.2 开发环境
然后先为大家
其实最近这三天的课程
大家应该也会体会到
服务器和客户端那些差别
所以其实先给大家看一下
别人家的开发环境什么样
是这样的
这样的还有这样的对吧
我看看我们自己家的开发环境什么样
就这样吧
这样的还有这样的
别人家那叫高端大气上档次
然后我们自己那个也是挺好的
我们叫低调奢华有内涵
就是我们不在意那些外表的表现
我们只在意内核就是逻辑
性能啊
这才是最重要的
所以其实
其实上面也能看到了我们的开发环境
主要就是Linux
Linux操作系统
所以作为一名服务器开发同学
一定要要学会在Linux
上面写自己的一些逻辑
也要去了解它
那Linux是一个自由开放的一个语言
其实做软件或者知识行业
如果能够把自己东西开放出去
把它开展出去
让全世界几代人去不断的去优化
和迭代它其实是一个非常好的思路
包括现在安卓也是这个套路
所以Linux发展到现在
已经变得非常成熟
还有比较稳定
那其实那我们怎么去跟它相处呢
其实在作为一个服务器的开发东西
我每天都有一个黑白的显示器电脑
在那里不挺抠的的时候
操作的时候其实跟我接触的
除了同事之外
那可能Linux
就是我最亲近的一个伙伴
所以我总结跟Linux的相处
就跟恋人实际上是一样一样的
就是首先我们要跟它保持好沟通
第二就是我们都对它多了解
但所谓沟通就是我们首先要非常熟悉
Linuux上面的一些简单的
一些操作命令和一些工具
它能够使我们彼此沟通的桥梁
我用这些命令和这些工具
才能更加好的跟它沟通
就像你有一个外国女朋友一样
你们俩是不是还是需要一种语言去沟通
然后所谓理解
就是我们大概也还是需要去知道
它都有哪些特点
而且每样的东西容量是怎么样的
而不要因为我们跟它接触的过程中
有些地方越了底线
让它不舒服了
所以那就是进一步的去了解一下我
我们这个女朋友
不是我们这个Linux就是它操作系统
里面主要的一些资源
其实大家桌子上都有笔记本电脑对不对
就是只要你把那显示器掰断了
然后扔开剩下的部分
你就可以理解成是一个Linux的状态了
主要的一个资源
我们需要关心的
首先第一点就是CPU
GPU
大家也很清楚了
中央处理器
它其实更多的一个角色是
解决了一个计算机反应速度的问题了
那我们在哪些方面
是需要关注Linuxcpu呢
其实更多的时候
我们要做一些例行计算的游戏的时候
要尤其注重CPU的使用
比如说我在做一款FPS游戏
在一个场景里面两人互相射击
那这个人究竟这一把子弹有没有打中我
这个肯定是不可能相应客户端的判断的
因为有很多外挂脚本
它可能会帮你去做判断
那作为最安全的一个方法
这个是要交给服务器做后台的校验的
但是在这里面会涉及到很多引擎
还有一些是否可见
或者是一些物理在里面的一个东西
所以这个每一把子弹都要去做这种校验
其实是一个比较高的一个
计算密集一个行为
而在这样的逻辑里面
我们就尤其注意它CPU一个使用率
如果CPU太高了
一台服务器只能跑十个场景
那你可以想象一下
就需要多少台机器
才能征支撑起王者荣耀这样东西
其实另外一块就是很多时候
大家不会注意到的一点
就是在网络层编码就是我发一个请求出去
实际上我是要把它编码成
我需要的那种协议
然后传给对方
对方需要解码它才能知道
我真正发给他的一些核心参数是什么
但是通常在这个过程中
实际上也是要大量消耗CPU的
那当我们这种上下行的情况特别多的时候
很有可能作为接入层的那个服务器
它的cpu会出现问题
所以这些都是我们需要关注它的点
第二块就是内存
其实内存大家也很熟了
它就更多像
计算机的记忆力
就是通常在什么情况下我们要注意
Linux的内存其实有一个思维
就是设计思维叫做用空间来换时间
那这里面实际关系到是一个缓存的设计
那当你在这种场景下用的多的时候
那你就要去关心它的内存
就刚刚我跟大家举例的时候说
QQ农场有一个核心算法
就是好友列表那个状态
那我们当时是怎么做的呢
就是用空间换时间的思路
我用空间来换取你每次计算的时间
举个简单例子
就是比如第一次拉我自己的好友列表的时候
我第一次肯定是要
把每个人的数据都拉出来了
而且要经过一些计算的对吧
那我得到了当时一个状态
但这种状态我可能可以把它存起来
然后比如说加个时间戳
五分钟之内我不重新计算它
那五分钟之内再有同样的请求
我直接用之前那个备份直接返回给客户端
其实在某些程度上
大概已经解决了这个快速的问题
那准确其实还有另外有其他的技巧
但是跟这个没有关系
我只是说我们用空间来换取它计算的时间
在这种设计
用缓存设计的时候
实际上我们是需要考虑内存的
内存是不是够
另外也就是单局类的
比如说我玩王者荣耀
我进入到一个单局的时候
单局里面所有的素材
场景
包括NPC配置
这可能都全都是在内存中的
那就是资源加在一起有多大我们要计算的
我们要计算好一个进程
大概能承受多少的房间
那就要推算出来
哪个房间它所占用的内存大小是多少
第三个就是硬盘了
这边应该很多同学都很敏感
因为
你学习资料能存多少对不对
然后其实真正硬盘这一块目前来看
其实它更多的是体现再存入层
它能够存入层的一些设想
比如说Log统计
这个Iog不知道大家 有没有概念
Log我就是服务器
在运行状态中
我会根据它的一些情况
定时的打出来一些文本
在本地
那这个文本是用来帮我们定位外网问题
或者做一些统计
所以这种东西叫Log
那它一般都是存在磁盘上面的
包括我们的战斗录像
就是不管你真的down机也好
但我想回放之前所有的状态的时候
其实我是需要把每一个状态存在一起的
那这个有可能就是一个二进制文件
但是它通常会很大
那这个如何就把它做一个本地化管理
是不是要定期的把它们存在一起
然后做一个归档
还是说定期的清空一下
这都是你本身对磁盘的一个理解
和做的一些处理
第四个网卡
其实这网卡如果我们这次假如说
课程设计做的是个单机游戏的话
就是很多人就不用再关心它了
但是如果我们做的是一个网络游戏的话
通常我们会怎么判断网卡
就是它上下行的一个频率
乘以每个包的大小
基本上就决定它的流量
那它流量本身
跟网卡的自身的一个条件约束
之间是不是匹配的
我们通常会觉得如果一个系统
它所有的瓶颈最终是在网卡的话
那它的CPU和内存包括磁盘这一块
那性能是做的很好
因为网卡法师一般是
受到物理的一个硬件的影响
但其他方面我们都做足了
最终它的瓶颈网卡
会觉得这个系统
它设计的性能会比较高一些
其实就是我这里没写
但是
可能现在有一个趋势
就是云游戏就是云游戏
可能我不知道你们有没有讲过
其实他很有可能未来会有一些
GPU图形计算的东西
也需要放到服务器云端
所以那个会在未来越来越重要
那那刚刚已经说到了解
了解的时候
我们可能有的时候会出现问题
就是你跟你的恋人在一起
可能会出现一些问题
但其实面对这些问题
我们怎么去解决它
其实还是要借助一些Linux上
一些性能的分析工具了
其实这个过程是特别好玩的
就是作为一个服务器开发
一方面是在刚刚设计的时候
一般是在实现它的时候
但是另外一方面的成就感会来自于
当它出现问题的时候
你如何能快速准确的找到它的问题
立马解决就是一点
所以在这个过程中
我们就类似于像是一个医生
或者侦探我们抽丝剥茧的根据一些工具
跑出来的性能指标
然后去找到它们之间的映射关系
然后从而推断出这个服务器
它可能出现那些问题
就像我刚刚说的他有可能是CPU的问题
有可能是内存的问题
有可能是磁盘的问题
也可能是网络问题
所以它出现问题的可能性很多
那如何去好好的掌握这几个工具
然后把它们综合的运用在一起
这里面是需要一些学习和经验的存在
然后也是很好玩的东西
所以这里面我不会展开
但是会列在这里让大家去自己去了解
就像刚刚我说的一样
我们又回到了 切换回
minigeme的状态
就是我们已经知道了语言了
知道了设计了
然后已经领到了自己的对应的
一台虚拟的Linux连接服务器了
用你自己账号登陆上去
那我们就开始怎么设计怎么个做法呢
其实举个最简单的例子吧
因为这里面不确定有很多同学都写过代码
所以我只能举了一个登陆接口
一个设计
就是说它的输入的话
就只需要我家这个框里面
写上我的QQ号和密码
输出的话就要求是输出
整个玩家的所有的QQ Game的信息
那对客户端说很简单
它只要把这两个数据点击发送过来就行了
而对于服务器上它大概是怎么个划分呢
其实第一个模块就是我首先要有一个进程
在那里监听
就是我要不停的看别人有没有发东西给我
所以我需要一个监听的一个模块
然后第二个就是当它收到了这个消息时候
它会给到别人去处理
所以会有一个处理的模块
那刚刚收到的登录校验
有可能本身不是我的能力
我要去用别人的能力去校验对吧
因为现在
QQ和密码是不可能直接发给每个业务
所以这里实际上是有一个公共的一个
接口需要调用的
那就是请求别人
然后第四呢
就是当我确定这个人是我自己
我登陆它也校验通过了
那我就要去我自己的服务器里面去拿东西
然后返还给他
这就整个这个过程
但是这里面其实已经涉及到了很多个角色
如果大家还不理解的话
我们可以想象一个场景
就是我们在大众点评上找到了
三里屯的一家网红店
走到店门口很多人在排队
然后你走到了那个小面门口
他问什么
他说
先生几位
然后那个三位
然后拿个号过去
所以其实
还有监听的这个人就特别像门童
就是他负责去收到别人的信息
你说来这个服务员把他领进去
但具体做执行的其实就是这个服务员
那你在服务员点餐的过程中
有可能你本身是没有这个菜呢
但是顾客要了
那我就订外卖嘛
对不对
就是给别的店下个单
然后别的店来响应这个事情
当外卖拿回来之后
也不可能直接称上来
所以我还得给后续处理一下
后厨在给我热一热
然后放在转盘等我拿回来给到客人
所以这个过程就是
你可以理解成门童收到了请求
然后给服务员让它去带进去做一些执行
但遇到不是我们自己的事让别人做
那我就订个外卖
然后拿回来
如果是我们自己的事情
我们还是要要放到存储里面去做
所以这里面会说到几个角色
去到服务器架构上的话
我们就会把它更加理论化
比如说门童就是接入层
然后服务员就是逻辑层
然后后面的后厨就是数据层
实际上很多时候这三层就够了
但有的时候还是需要外面提供一些API的
但是除此之外
其实这里面容易很容易被忽视的一点就是
模块模块之间的一个沟通
实际上还关系到一个组件
就是数据通道
就是这些模块之间怎么进行数据的交互
是更高效
更快速的
其实是很重要的一个环节
那这里面其实也是非常非常的
怎么说有设计在里面的一个东西
-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运维案列分析
--多选题