游戏引擎设计:多人游戏和监听服务器

Posted

技术标签:

【中文标题】游戏引擎设计:多人游戏和监听服务器【英文标题】:Game engine design: Multiplayer and listen servers 【发布时间】:2011-07-05 05:13:35 【问题描述】:

我的游戏引擎现在包含一个可以工作的单人游戏部分。我现在开始考虑如何做多人游戏部分。

我发现很多游戏实际上并没有真正的单人模式,但是当你单独玩时,你实际上也是在托管一个本地服务器,几乎所有东西都像在多人游戏中一样运行(除了数据包可以通过备用路线以获得更好的性能)

我的引擎需要进行重大重构以适应此模型。将有三种可能的模式:专用客户端、专用服务器和客户端-服务器(侦听模式)

在游戏行业中使用监听服务器模型的频率如何? 它有什么(缺点)优点? 我还有哪些其他选择?

【问题讨论】:

您可以考虑在gamedev.stackexchange.com上发布此内容 【参考方案1】:

我会看看我是否能尽我所能回答这个问题:

在游戏行业中使用监听服务器模型的频率如何?

当谈到大多数在线游戏时,您会发现大部分游戏都使用客户端-服务器架构,尽管并不总是按照您的想法。以任何 Source 游戏为例。大多数人将使用具有主服务器架构的标准客户端-服务器(列出可用游戏),因为一个人将托管一个专用服务器,任何拥有客户端的人都可以加入它。

但是,您有一些游戏和服务,例如 Left 4 Dead、英雄联盟和一些 Xbox Live 游戏,它们采用的方法略有不同。这些都使用带有控制服务器的客户端-服务器架构。这里的主要思想是有人创建了一个不“运行”任何游戏的专用服务器。控制服务器会创建一个“大厅”,当游戏开始时,控制服务器会将它们添加到队列中,当轮到大厅时,它会选择一个匹配的专用服务器(根据位置/速度,可用性,许多因素),并将玩家分配到该服务器。只有这样服务器才能真正“运行”游戏。思路相同,但稍微简化了一点,因为客户端不需要“选择”服务器,只需加入游戏并让控制服务器完成工作。

当然,最大的客户端-服务器模型是 MMO 模型,其中一个或多个服务器运行一个持久的世界,处理几乎所有的数据和逻辑。使用这种模型的一些比较有名的游戏是魔兽世界、无尽的任务,诸如此类。

那么监听服务器在哪里适合呢?老实说,并不是那么好,但是,您仍然会发现很多游戏都在使用它。例如,大多数 Source 游戏都允许创建监听服务器,许多 Xbox Live 游戏都允许创建(已经有一段时间了,但我相信 Counter Strike 以及 Quake 4 和许多其他游戏都允许)。但总的来说,由于客户端-服务器模型的优势,它们似乎不受欢迎,这将我们带到了下一点。

它有什么(缺点)优点?

首先:性能。在客户端-服务器模型中,客户端将在游戏的每个循环中处理本地更改(例如输入、图形、声音等)。在循环结束时,它会打包相关数据(例如,玩家移动了吗?如果移动了,移动到哪里?他/她现在在看哪里?速度?他们开枪了吗?如果是,关于子弹的信息。等)并将其发送到服务器进行处理。服务器将获取这些数据并确定每件事是否有效,例如,用户是否以指示黑客的方式移动(稍后会详细介绍),移动是否有效(有任何障碍?),是否来自玩家的子弹1 击中玩家 2?等等。然后服务器将其打包,并将其发送给客户端,然后客户端更新任何必要的内容,例如在玩家被击中时调整生命值,如果确定玩家正在攻击则踢玩家等等。

然而,监听服务器必须同时处理所有这些。由于我假设您熟悉编程,您可能会意识到游戏可以从计算机上夺走多少能量,尤其是设计不佳的游戏。添加网络处理、安全处理等以及客户端游戏,您可以看到性能会受到严重影响的地方,至少就标准处理而言。此外,大多数服务器在快速网络上运行,并且是旨在承受网络流量的服务器。如果监听服务器的网络很慢,整个游戏都会受到影响。

第二个安全,如前所述,服务器将做的主要事情之一是确定玩家是否正在利用游戏。您可能已经将它们视为 Punkbuster、VAC 等。运行这些程序有一套非常复杂的规则,例如,确定黑客与非常优秀的玩家之间的区别。如果你无法抓到黑客,那对你的游戏来说会非常糟糕,但如果你对一个被诬告的人采取行动,那就更糟了。

监听服务器通常无法处理客户端的游戏、服务器处理和黑客检测,在大多数情况下,像 Punkbuster 这样的检测器很难在监听服务器上运行,如果不是不可能的话,因为如果没有必要的处理能力,它很难正常运行,因为通常游戏逻辑优先于安全性,如果不允许检测器处理一帧,它可能会丢失定罪所需的数据。

最后,游戏性。服务器最大的特点是它们是持久的,这意味着即使每个人都离开了,服务器也会继续运行。如果您有一个在夜间没有太多活动的流行服务器,这很有用,人们仍然可以在准备好玩时加入,而不必等待它重新上线。

在监听服务器中,主要缺点是,一旦托管监听服务器的客户端离开,游​​戏要么必须转移给另一个玩家(在某些情况下在游戏中创建可能持续几分钟的 lul),要么必须彻底结束。这在大型服务器上并不可取,因为主机必须保持在线(浪费服务器中的一个插槽,以及他/她的计算机能力,这也会减慢游戏速度),或者为所有人结束游戏。

然而,尽管存在这些问题,监听服务器确实有一些优势。

易于设置:大多数监听服务器只不过是点击“新游戏”并让人们加入。对于只想和朋友一起玩,又不想找空的专用服务器或与其他人一起玩的人来说,这很容易。

适合测试:如果拥有一台专用服务器并希望更改其配置,通常最好先测试配置。用户要么必须创建专用服务器的备份并盲目地进行更改,唯一的选择是在出现问题时回滚,创建一个新的专用服务器来测试它们,或者只创建一个简单的监听服务器测试它们。在第 1 点中,这些通常更容易启动和配置。尤其如此,因为大多数专用服务器不在管理员的直接访问范围内(大多数专用服务器是从远程位置租用的)。将配置更改以及重新启动命令等推送到远程位置比管理员当前所在的计算机需要更长的时间。

资源较少:在大多数专用服务器中,具有相同 IP 的用户无法连接到专用服务器(这意味着,客户端必须托管服务器或玩游戏,他们不能同时做这两个)。如果客户希望在他/她自己的服务器上玩游戏,他们通常需要第二台机器来托管服务器,或者购买或租用一个专用服务器,以便他们可以在其上实际玩游戏。一个监听服务器只需要一台机器,这可能是客户端唯一可以使用的东西。

在任何一种情况下,两者都有优点和缺点,您需要根据您愿意设计和实施的内容来权衡它们。根据我的经验,我相信如果你要实现一个监听服务器,它会被使用,如果只是为了一些希望与朋友一起玩耍或测试设置的用户。

最后:

我还有什么其他选择?

这是一罐工业蠕虫。实际上,任何类型的网络架构都可以应用于视频游戏。然而,据我所见,与大多数互联网通信一样,大多数都归结为某种形式的客户端-服务器模型。

如果我没有回答你的问题,或者如果你需要扩展的东西,请告诉我,我会看看我能做些什么。

【讨论】:

以上是关于游戏引擎设计:多人游戏和监听服务器的主要内容,如果未能解决你的问题,请参考以下文章

5G+云计算打开发展空间,游戏引擎技术破壁工业场景

什么是游戏引擎?

请问用unity3d来制作MMO类型网络游戏,服务端该如何制作?听说用Photon网络引擎可以制作,有详细的教程吗?

如何防止在我们的(多人)游戏中作弊?

基于组件的设计(C# 游戏引擎)

游戏引擎剖析