原文地址:Fast-Paced Multiplayer (Part I): Introduction

简介

这是一系列的关于快速多人游戏的技术和算法的文章的第一篇,如果你对于多人游戏背后的技术非常熟悉,那么你可以直接跳到下一篇 - 因为接下来的内容只是介绍性质的。

每一种游戏的开发技术都有各自的难点,多人游戏则给游戏开发添加了一系列要处理的问题,有趣的是,其中最核心的问题是让人看上去自然和物理模拟。

关于作弊的问题

所有的一切的起源都是作弊。

作为一个游戏开发者,你一般不会去担心有人在你的单人游戏中去作弊 - 因为他的行为不会给其他人带来影响,一个作弊的玩家可能并不会按你设计的套路去进行游戏,但是游戏是他的,他们有权利去选择怎么去玩。

多人游戏则不同。在任何的有竞争关系的游戏中,一个作弊玩家不仅仅给自己带来了更好的体验,他也毁了其他的玩家的游戏。作为开发者,你可能希望避免出现这样的情况,因为这会让玩家流失。

为了防止作弊,有很多事可以去做,但是最重要最(可能也是唯一有意义的)的事非常简单:不要相信玩家。就做最坏的打算:所有玩家都想要作弊。

权威服务器和静默客户端

有一个非常简单的解决方案 - 你将游戏中所有的逻辑都放在你控制的服务器来做,而客户端只是游戏的旁观者,换句话说,你游戏的客户端把输入(按键,命令)发送到服务器,服务器来运行这个游戏,然后你把结果返回给客户端。这就是常说的权威服务器,因为游戏世界中发生的一切都在服务器中进行。

当然,你的服务器还是可能被发现漏洞,但是这就不属于我们要谈论的范围了。使用权威服务器可以防止很多的漏洞,比如,服务器不信任玩家的在客户端的血量,客户端想要作弊,把本地的血量调到10000%,但服务器知道血量只有10% - 当玩家被攻击的时候它还是会死掉,不管客户端的血量是多少。

服务器同样不信任玩家的位置。你可能会这样做,在这一秒你告诉服务器“我在(10,10)”,然而下一秒你告诉服务器“我在(20,10)”,这样就可以穿过一堵墙或者超快速的移动。但是,权威服务器知道玩家在(10,10),当客户端告知服务器他要往右动一格的时候,客户端的位置会由服务器来处理,将位置更新为(11,10),然后告知玩家“你在(11,10)”。如下图所示:

一个简单的CS交互

小结:游戏的状态由服务器独自管理。客户端将动作发送给服务器,服务器来周期性地更新游戏状态,然后将新的游戏状态发送给客户端,客户端对结果进行渲染呈现。

处理网络

上面的处理方式对于回合制的游戏非常适合,比如策略游戏或者棋牌类的游戏。它在LAN中也能工作的很好,在这种情况下,通信是瞬发的。但是对于一些对实时性要求很高的游戏,而且在internet环境中,这种解决方案就会出问题了。

下面来谈一些物理的问题。假如你在旧金山,连接了一个在纽约的服务器,两地相距4000km或者2500英里(大概是里斯本到莫斯科的距离)。任何东西都不能比光快吧,即使是Internet上的数据(数据传播的底层可能是光的脉冲,线缆中的电子,或者是电磁波),光传播的速度大概是300000km/s,所以传播4000km需要13ms。

这听起来可能很快,但这实际是最乐观的情况 - 假设数据传播的速度是光速,沿着直线传播,这些通常是不可能的。在真实情况下,数据是由无数个路由经过一系列的跳(在计算机网络里的属于叫做hops)进行传播的,而且大部分的传播速度都达不到光速;路由在传播的时候也会产生一些延迟,因为包必须被打包,检查和分发。

所以保险起见,我们假设数据从客户端到服务器需要50ms,这接近最好的场景了 - 当你在纽约而服务器在东京呢?假设网络因为什么原因发生阻塞了呢?100ms,200ms,500ms的延迟也是有可能的。

回到我们的例子,你的客户端将输入“我按下了向右的按键”发给服务器,服务器在50ms之后获取了数据,现在假设服务器能够立即响应并且将结果返回,那么客户端在50ms之后获得新的游戏状态“你现在在(1,0)”。

从你的视角来看,情况是这样的:你按下了向右的按键,但是什么事都没发生,直到一百年后你的角色向右移动了一格。这样的延迟是显而易见的,当然延迟半秒不仅仅是显而易见,它让整个游戏没法玩了。

总结

通过网络连接的多人游戏是超级有趣的,但是引入了一系列的难题和挑战。权威服务器架构能够防止很多的作弊,但是直接用这种方法会让游戏的响应变得迟缓。

在下面的文章,我们会介绍我们怎么围绕权威服务器来建立一个系统,能够最小的减少玩家的延迟体验,就像在玩单机游戏一样顺畅。

快速多人游戏(1) - 介绍相关推荐

  1. 快速多人游戏(4) - 爆头!(AKA延迟补偿)

    原文链接:Fast-Paced Multiplayer (Part IV): Headshot! (AKA Lag Compensation) 介绍 从上一篇文章到现在已经过了很久很久了(整整两年!哦 ...

  2. 拨测工具_您可以拨多少钱? 快速简单地介绍有用的工具。

    拨测工具 by Miguel Bustamante 通过Miguel Bustamante 您可以卷曲多少? 快速简单地介绍有用的工具. (How much can you cURL? A quick ...

  3. ArcGIS快速制图插件介绍

    ArcGIS快速制图插件介绍 By 李远祥 作品背景 <快速制图插件增强版>在原有的<快速制图插件>基础上,加入植被乱序填充.生成立体楼快.等高线增强显示.一键导出地图和数据. ...

  4. tera服务器不显示,tera无法登陆怎么解决_tera无法登陆的快速解决方法介绍

    tera无法登陆有哪些解决办法?下面小编为大家详细介绍. 一.帐号或密码错误 1.症状: 2.登陆器提示账号或密码错误. 3.原因: 4.未使用正确的账号和密码进行登陆. 解决方法 请查看您是否使用正 ...

  5. etabs数据_ETABS 快速建模技巧介绍.pdf

    结构分析与设计软件ETABS 知识选讲(一) ETABS 快速建模技巧介绍 沈万湘 李立 北京金土木软件技术有限公司 使用结构分析与设计软件时,建立分析 安装目录下的Default.edb 文件中的信 ...

  6. fastboot快速引导模式 介绍

    fastboot 快速引导模式 介绍 Fastboot 是一种在 Android 设备上启动引导程序的方式.通过 Fastboot,您可以在设备的引导分区中刷入镜像文件.格式化分区.解锁引导加载程序等 ...

  7. linux locate 快速查找命令介绍

    时间过得好快,一转眼一年又快到过年了,很久没有和大家分享了,工作实在太忙了. 使用linux的人都会知道find查找命令. 下面有关于find的使用说明 :linux 查找命令大全. 下面给大家介绍一 ...

  8. 3DMAX快速入门 界面介绍【上】

    对3D软件感兴趣的你在打开3Dmax的那一刻,有没有傻眼?密密麻麻的格子让人看得眼花缭乱,为了避免你一打开就把软件关掉,从此就关上了3d这一款赚钱软件的窗户. 小锤就来和你介绍一下3dmax,让你对于 ...

  9. NW(New World)快速开发平台介绍(完整的中小型管理系统解决方案)

    在公司做了3年多的web平台开发,自己(和同事)总结了一套快速开发平台,定位于快速开发中小型的管理系统.NW开发平台是一个完整的解决方案,包括前端组件.权限.事务.dao.报表.vo生成器.eclip ...

最新文章

  1. next_permutation函数
  2. linux操作系统分析实验—基于mykernel的时间片轮转多道程序实现与分析
  3. 高级编程学习笔记day01(知识点篇)
  4. printf 规定数据输出方式
  5. Nginx完美解决前后端分离端口号不同导致的跨域问题
  6. table内容保存到Excel中
  7. 是否采用SD-WAN?你需要先考虑以下问题
  8. 将2^n (n=1000000) 转化为10进制输出
  9. 必备的海外贸易沟通工具 - intbell使用教程
  10. 1.3 n-gram平滑算法:Good-Turning、拉普拉斯平滑
  11. 2019/12/9 K60单片机学习
  12. 仿9GAG制作过程(五)
  13. C程序设计第五版谭浩强课后答案 第八章习题答案
  14. 历史影像高清晰历史卫星影像
  15. 于树莓派安装Ubuntu系统
  16. linux查看服务器网络延迟,ECS Linux下的qperf测量网络带宽和延迟的具体步骤
  17. 系统集成项目管理工程师英语题翻译
  18. 华为、联想:外媒眼中的“中国制造”
  19. PL3368C、PL3368CE
  20. 你必须掌握的,快速幂算法

热门文章

  1. 电脑怎么转换图片分辨率?照片如何看分辨率?
  2. java正则表达式校验手机号,电话号码,邮箱
  3. 家里没宽带的朋友,不用发愁了
  4. 一家个人计算机制造商 有一万个备份,2014年职称计算机考试Windowsxp冲刺试题单选题及答案...
  5. 正则表达式--大集合
  6. 例题8-13:环形跑道
  7. 知乎不能改用户名吗_知乎上改了用户名 知乎不能改用户名吗
  8. assert定义和用法
  9. stackedplot 函数_【matlab 基础篇 03】一文带你全面了解 plot 绘图函数的使用(超详细+图文并茂)...
  10. 将Windows 11系统默认IP地址修改为静态IP,并成功连接上网