1.快节奏的多人游戏 (第一部分):客户端 - 服务器游戏架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25327609/article/details/88891822

英文原文地址 Fast-Paced Multiplayer (Part I): Client-Server Game Architecture

能力有限,如有错误,请谅解,并欢迎指正!

介绍


      本文是探索快节奏的多人游戏系列文章的第一篇,这个系列主要有关快节奏的多人游戏的相关技术和算法。如果您熟悉有关多人游戏的概念,您可以安全地跳到本系列的下一篇文章 - 以下是介绍性讨论。

      开发任何类型的游戏本身都极具挑战性, 然而,多人游戏更是增加了一组全新的需要解决的难题。有趣的是,核心问题是人性和物理!

外挂的问题


      这一切都始于外挂。

      作为一个游戏开发者,您通常不关心玩家是否在单人游戏中开挂 --他的行为不会影响除他之外的任何人。开挂的玩家可能无法完全按照您的计划体验游戏,但由于这是他们的游戏,他们有权以任何他们喜欢的方式玩游戏。

      然而,多人游戏却不同。在任何竞争游戏中,开挂的玩家不仅仅是让自己的体验更好,而且还会让其他玩家的体验变得更糟。作为开发者,您可能希望避免这种情况,因为它往往会逼走您的游戏玩家。

      有许多事情可以防止外挂,但最重要的一个(可能是唯一真正有意义的一个)很简单:不要相信玩家。总是假设最坏的 – 玩家总会试图作弊。

权威的服务器和愚蠢的客户端


      这引出了一个看似简单的解决方案 - -您可以让游戏中的所有内容都发生在您控制的中央服务器中,并使客户成为游戏的特权观众。换句话说,您的游戏客户端将输入(按键,命令)发送到服务器,服务器运行游戏,然后将结果发送回客户端。这通常称为使用权威服务器 ,因为关于世界上发生的所有事情的唯一权威是服务器。

      当然,玩家可以利用您的服务器漏洞,但这超出了本系列文章的范围。使用权威服务器的确可以防止各种各样的黑客攻击。例如,您不应该信任客户端所告知的玩家的血量信息;因为被黑的客户端可以修改其值的本地副本,并告诉玩家它具有10000%的血量状况,但服务器知道它只有10% – 当玩家受到攻击时,它将会死亡,无论被黑客改成了什么。

      您也不相信玩家在世界上的地位。如果你这样做了,一个被黑的客户端会告诉服务器 “我在(10,10)”,一秒钟后**“ 我在(20,10) ”,可能穿过一堵墙或比其他玩家移动更快。相反,服务器知道玩家在(10,10),客户端告诉服务器“ 我想向右移动一个方格 ”,服务器用(11,10)的新玩家位置更新其内部状态,然后回复玩家“ 你在(11,10) ”**:
简单的客户端 - 服务器交互。
      总之:游戏状态仅由服务器管理。客户端将其操作发送到服务器。服务器定期更新游戏状态,然后将新游戏状态发送回客户端,客户端只是在屏幕上呈现它。

处理网络


      愚蠢的客户端方案适用于基于慢回合的游戏,例如策略游戏或扑克。它也适用于局域网设置,在所有实际应用中,通信都是即时的。但是,当用于通过互联网等网络进行快节奏的游戏时,这会被打破。

      我们来谈谈物理。假设你在旧金山,连接到纽约的服务器。那是大约4,000公里,或2,500英里(大约是里斯本和莫斯科之间的距离)。没有什么比光更快,即便是互联网上的字节(在较低级别是光脉冲,电缆中的电子或电磁波)。光以大约300,000 km / s的速度行进,因此穿过4,000 km需要13 ms。

      这可能听起来非常快,但它实际上是一个非常乐观的设置 – 它假设数据以直线路径的光速传播,通常却不是这种情况。在现实生活中,数据经历了从路由器到路由器的一系列跳转(在网络术语中称为 跳跃),其中大多数都不是在光速下进行的,路由器自身会引入一些延迟,因为必须复制,检查和重新路由数据包。

      为了方便讨论,我们假设从客户端到服务器的数据需要50毫秒。这接近最佳情况 - 如果您在纽约连接到东京的服务器会发生什么?如果出于某种原因网络拥塞怎么办?延迟100,200甚至500毫秒并非闻所未闻。

      回到我们的示例,您的客户端向服务器发送一些输入 (“ 我按下右箭头 ”) 。服务器在50毫秒后获得它。假设服务器处理请求并立即发回更新的状态。您的客户端在50毫秒后获得新游戏状态 (“ 您现在处于(1,0) ”)

      从你的角度来看,发生了什么事情是你按下右箭头但是没有发生任何事情,只有十分之一秒; 然后你的角色终于向右移动了一个方格。 你的输入与其后果之间的感知 滞后可能听起来并不多,但它是显而易见的 - 当然,延迟半秒不仅明显,它实际上使游戏无法玩了。

总结


      网络多人游戏非常有趣,但引入了一系列全新的挑战。权威的服务器架构非常擅长阻止大多数作弊,但直接的实现可能会使游戏对玩家而言反应迟钝。

      在接下的文章中,我们将探讨如何构建基于权威服务器的系统,同时最大限度地减少玩家所经历的延迟,使其几乎与本地或单人游戏无法区分。

猜你喜欢

转载自blog.csdn.net/qq_25327609/article/details/88891822