我正在寻找特定于游戏的网络设计和技巧。我知道一些问题,我对其中一些问题有一些部分解决方案,但是可能有我看不到的问题。我认为没有明确的答案,但我会接受我真正喜欢的答案。我可以想到4种问题。

信号不好

客户发送的消息需要一些时间才能到达服务器。服务器不能仅仅处理FCF,因为这对延迟较高的玩家不公平。一个部分解决方案是消息上的时间戳,但您需要2件事:

  • 能够信任客户时钟。 (我认为这是不可能的。)
  • 您可以测量的恒定潜伏期。您可以如何处理可变延迟?

许多游戏都使用UDP,这意味着可能会丢失消息。在这种情况下,他们试图根据已经拥有的信息来估算游戏状态。您怎么知道连接再次工作后估计的状态是否正确?

在MMO游戏中,服务器处理了大量客户。分配负载的最佳方法是什么?基于游戏中的位置?将一组客户群绑定到服务器?您可以避免通过服务器发送所有内容吗?

玩家离开

发生这种情况时,我已经看到了两种不同的行为。在大多数FPS游戏中,如果托管游戏的玩家(我想他是服务器)会留下其他游戏。在大多数RTS游戏中,如果任何玩家离开其他玩家,其他人都可以在没有他的情况下继续比赛。没有专用服务器,怎么可能?每个人都知道全州吗?他们在以某种方式传输服务器的角色吗?

访问信息

下一个问题可以由专用服务器解决,但是我很好奇是否可以在没有一个的情况下完成。在许多游戏中,玩家不应该知道游戏的全部状态。 FPS中的RT和墙壁中的雾气是一个很好的例子。但是,他们需要知道操作是否有效。 (例如,您可以从那里射击我还是在地图的另一侧。)在这种情况下,客户需要验证对未知状态的更改。这听起来像是可以通过巧妙地使用加密原语来解决的。有任何想法吗?

作弊

在受信任的客户环境中,上述某些问题很容易,但不能假定。是否有解决方案在80%的普通用户中起作用-20%的骗子环境?您真的可以制作一个有效的反陈词软件(并且不需要诸如内核模块之类的荒谬的东西)吗?

我确实阅读了这个问题和一些答案 https://stackoverflow.com/questions/901592/best-game-network-programming-argrampomming-argragramming-ark--books 但是其他答案链接到不可用/限制的内容。这是一个平台/独立的问题,但也欢迎特定平台/OSS的解决方案。

有帮助吗?

解决方案

思考密码学将解决此类问题是一个非常普遍且非常糟糕的错误:客户本身当然必须能够解密它,因此完全毫无意义。您没有添加安全性,只是添加了晦涩难懂(那是 将要 破裂)。

作弊太具体了。在某些游戏中,它无法完全消除(FPS中的Aimbot),而某些游戏根本无法搞砸(基于服务器的转弯游戏)。

在一般网络问题中,与预测密切相关,这是一个非常复杂的主题 最好著名的阀门文章 关于它。

其他提示

服务器不能仅仅处理FCF,因为这对延迟较高的玩家不公平。

是的,它可以。试图确切猜测某人的延迟不公平,因为延迟的变化。

在这种情况下,他们试图根据已经拥有的信息来估算游戏状态。您怎么知道连接再次工作后估计的状态是否正确?

服务器根本不必猜测 - 它知道状态。客户仅在连接下降时必须猜测 - 备份后,它将被发送新状态。

在MMO游戏中,服务器处理了大量客户。分配负载的最佳方法是什么?基于游戏中的位置?

没有“最好的方式”。但是,地理分区的效果很好。

您可以避免通过服务器发送所有内容吗?

仅对于不受信任的通信,通常在带宽上很低,因此没有意义。

在大多数RTS游戏中,如果任何玩家离开其他玩家,其他人都可以在没有他的情况下继续比赛。没有专用服务器,怎么可能?每个人都知道全州吗?

许多RTS游戏在所有机器中同时保持完整状态。

在受信任的客户环境中,上述某些问题很容易,但不能假定。

大多数对公众开放的游戏需要采用100%的作弊环境。

信号不好

潜伏期高的玩家应购买新的调制解调器。我认为添加更多延迟不是一个好主意,因为游戏中的一个人的联系不好。或者,如果您是指较小的延迟差异,谁在乎?如果您拒绝FCF,您只会使事情变得更慢和复杂。

作弊:Aimbots和类似

您真的可以制作一个有效的反陈词软件吗?你不能。您不知道他们是在运行您的程序还是其他类似您的程序。

作弊:获取信息

如果您与可以信任的专用服务器有安全的连接,那么作弊,例如看到比允许更多的状态是不可能的。

有几种游戏可以防止作弊。像扑克这样的纸牌游戏,每个玩家都有机会“洗牌”。 Wikipedia的详细信息: 精神扑克.

从理论上讲,使用RTS或FPS,您可以加密游戏状态的一部分。然后将其发送给所有人,并仅发送解密键,以查看其允许看到的零件或允许它们看到它。但是,我怀疑在2010年,我们可以实时执行此操作。

例如,如果我想验证,您确实可以在位置B。我需要知道您来自哪里以及您在那里的时间。但是,如果您以前告诉我,我知道我不允许知道一些事情。如果您之后告诉我,您可以告诉我任何您要我相信的事情。您可能以前告诉我,加密,并在需要验证时给我解密密钥。这意味着,您必须使用不同的加密密钥来加密您采取的每一步。哎哟。

如果您不实施扑克网站,则作弊将不是您最大的问题。

随着很多人在移动设备上访问游戏,当玩家处于接收率不佳或与慢速连接连接时,可能会发生“不良网络”。因此,这不仅仅是人们在人口稀少的地区连接的问题。随着移动客户端的“不良网络”,可能会经常发生“不良网络”,并且通常很难诊断。

UDP会导致数据包丢失,但是即使是使用TCP和HTTP的游戏也可以遇到问题,在验证数据包时,客户端和服务器通信会减慢爬网。通过通信,对数据包丢失的UDP补偿通常取决于数据包所包含的内容。如果您要谈论的是运动数据,通常如果未收到数据包,则服务器会插入以前的轨迹并进行位置更改。通常,这是游戏如何处理的习惯,这就是为什么人们经常避免使用UDP的原因,除非他们的游戏类型需要它。通常,为了处理高网络延迟,游戏会自动降低用户可用的功能数量,以便他们仍然可以与游戏进行交互而不会导致用户被踢脚或体验太多破碎的功能。

最佳地,您想拥有一个记录工具 伐木 可用的可帮助您找到与不良连接和延迟有关的错误,并在其发生时向您展示客户和服务器上的条件,此可见性使您可以诊断使用者遇到的常见问题并制定解决方案的策略。

玩家离开如今,大多数游戏都有专用的服务器,因此此问题主要是毫无意义的。但是,有时候,可以将服务器更改为另一个客户端。

作弊很难预见玩家将如何作弊并创建一个没有人可以入侵的备忘录系统。如今,许多作弊检测策略基于对记录和行为分析信息数据的启发式分析,以发现异常情况并进行审查。您绝对应该尝试尽可能合理地进行欺骗,但是您也确实需要一个早期的检测系统,该系统可能会发现人们正在利用的新缺点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top