代码之家  ›  专栏  ›  技术社区  ›  stribika

游戏中的网络问题

  •  6
  • stribika  · 技术社区  · 14 年前

    我正在寻找网络设计和技巧具体的游戏。我知道一些问题,我有一些部分的解决方案,但有些问题我还看不出来。我想没有确切的答案,但我会接受一个我非常喜欢的答案。我能想到四类问题。

    客户端发送的消息需要一些时间才能到达服务器。服务器不能只处理fcf,因为这对延迟更高的玩家是不公平的。部分解决方案是在消息上添加时间戳,但需要两件事:

    • 能够信任客户。(我认为这是不可能的。)

    很多游戏使用UDP,这意味着消息可能会丢失。在这种情况下,他们试图估计游戏状态的基础上,他们已经拥有的信息。重新连接后,如何知道估计的状态是否正确?

    在MMO游戏中,服务器处理大量的客户端。分配负载的最佳方式是什么?基于游戏中的位置?将一组客户机绑定到服务器?你能避免通过服务器发送所有信息吗?

    我看到过两种不同的行为。在大多数FPS游戏中,如果游戏的主人(我猜他就是服务器)离开了其他人就不能玩了。在大多数RTS游戏中,如果有玩家离开,其他玩家可以不带他继续玩。没有专用服务器怎么可能?每个人都知道完整的状态吗?他们是在转移服务器的角色吗?

    下一个问题可以通过一个专用服务器来解决,但我很好奇,如果没有一个服务器,它是否可以完成。在许多游戏中,玩家不应该知道游戏的全部状态。RTS中的战争迷雾和FPS中的墙就是很好的例子。然而,他们需要知道一个动作是否有效。(例如,你能从那里射我吗,或者你在地图的另一边。)在这种情况下,客户需要验证对未知状态的更改。这听起来像是可以通过巧妙地使用加密原语来解决的问题。有什么想法吗?

    作弊

    上面的一些问题在可信客户机环境中很容易出现,但这是无法假设的。有没有解决方案,例如在80%的正常用户-20%的作弊者的环境中工作?你真的可以做一个反作弊软件,工作(而且不需要像内核模块这样可笑的东西)?

    我确实读过这些问题和一些答案 https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books 但其他答案链接到不可用/受限内容。这是一个独立于平台/操作系统的问题,但也欢迎针对特定平台/操作系统的解决方案。

    4 回复  |  直到 8 年前
        1
  •  2
  •   o0'.    14 年前

    作弊太过游戏化。有些游戏是无法完全消除的(FPS中的aimbot),有些游戏如果你不搞砸就根本不可能了(基于服务器的turn游戏)。

    一般来说,像这样的网络问题与预测有着密切的关系,预测是一个非常复杂的课题 在这本书中有很好的解释 famous Valve article 关于它。

        2
  •  2
  •   Kylotan    14 年前

    服务器不能只处理fcf,因为这对延迟更高的玩家是不公平的。

    是的,它可以。随着延迟的变化,猜测一个人到底有多大的延迟是不公平的。

    服务器根本不需要猜测-它知道状态。客户端只需在连接关闭时进行猜测—当连接恢复时,它将被发送到新状态。

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

    你能避免通过服务器发送所有信息吗?

    在大多数RTS游戏中,如果有玩家离开,其他玩家可以不带他继续玩。没有专用服务器怎么可能?每个人都知道完整的状态吗?

    上面的一些问题在可信客户机环境中很容易出现,但这是无法假设的。

    大多数对公众开放的游戏都需要假设一个100%的作弊环境。

        3
  •  2
  •   Ishtar    14 年前

    坏网络

    你真的能做一个反作弊软件吗?不,你不能。你不知道他们是在运行你的程序还是另一个类似你的程序。

    作弊:获取信息

    如果你有一个与你可以信任的专用服务器的安全连接,那么作弊,比如看到的状态超过了允许的,应该是不可能的。

    Mental Poker .

    有了RTS或FPS,理论上你可以加密你的游戏状态。然后将其发送给所有人,并且只发送允许他们看到的部分或允许他们看到的部分的解密密钥。然而,我怀疑在2010年我们能否实时做到这一点。

    例如,如果我想确认你确实可能在B地点,那么我需要知道你从哪里来,什么时候在那里。但是如果你以前告诉过我,我知道一些我不被允许知道的事情。如果你事后告诉我,你可以告诉我任何你想让我相信的事。你可以告诉我之前,加密,并给我解密密钥时,我需要验证它。这意味着,你必须用不同的加密密钥加密你所做的每一个动作。哎哟。

    如果你没有实现一个扑克网站,作弊将不会是你最大的问题无论如何。

        4
  •  1
  •   King Zaphod    10 年前

    由于很多人在移动设备上访问游戏,当玩家处于接收效果不佳的区域或连接到慢速wifi连接时,可能会出现“坏网络”。因此,这不仅仅是一个人口稀少地区的人们联系的问题。对于移动客户端,“坏网络”经常发生,而且通常很难诊断。

    UDP会导致数据包丢失,但是即使使用基于TCP和HTTP的游戏也会遇到这样的问题:在验证数据包是否已发送时,客户端和服务器的通信速度会减慢到爬行速度。在UDP通信中,对数据包丢失的补偿通常取决于数据包包含的内容。如果你说的是运动数据,通常情况下,如果没有收到数据包,服务器会插入先前的轨迹并改变位置。通常这是游戏的自定义处理方式,这就是为什么人们经常避免UDP,除非他们的游戏类型需要它。通常为了处理高网络延迟问题,游戏会自动降低用户可用功能的数量,以便用户仍然可以与游戏交互,而不会导致用户被踢或体验太多损坏的功能。

    Loggly 它可以帮助您查找与不良连接和延迟相关的错误,并向您显示发生错误时客户端和服务器上的情况,这种可见性允许您诊断用户遇到的常见问题并制定解决这些问题的策略。

    现在大多数游戏都有专门的服务器,所以这个问题基本上没有意义。但是,有时是的,可以将服务器更改为另一个客户机。

    作弊 很难预测玩家将如何作弊并创建一个无人能破解的防作弊系统。如今,许多欺诈检测策略都是基于对日志和行为分析信息数据的启发式分析,以便在异常发生时发现异常并将其标记以供审查。你当然应该尽可能地欺骗证据,但你也确实需要一个早期检测系统,能够发现人们正在利用的新缺陷。

    推荐文章