gpt4 book ai didi

network-programming - 多人/在线游戏编程中最常见的新手错误?

转载 作者:行者123 更新时间:2023-12-04 22:17:40 24 4
gpt4 key购买 nike

你见过什么样的新手错误,有什么治疗方法?

一次又一次发生的是客户端没有以任何方式针对服务器进行检查。

例如:

  • 用户反编译 Flash 游戏源或监听网络流量,查看高分数据的去向,并在那里发送虚假高分,甚至不玩游戏。
  • 用户使用训练器并获取甚至可能不会出现在当前级别的项目。这将发送到服务器,例如“客户端 X 得到了项目 Y”,服务器只接受它。

  • 简单的解决方法当然是将游戏客户端仅作为服务器的 API 来处理。然后用户可以随心所欲地使用训练器和其他内存操作,但服务器只是说你不能这样做。将服务器视为一个数据库,您可以在其中查询带有游戏规则的内容。

    例如
  • 客户端:开始游戏
  • 客户端:连接到服务器
  • 客户端:从服务器
  • 查询可用金额
  • 用户:启用将金钱设置为无限的训练器
  • 客户端:server.buyItem('非常昂贵')
  • 服务器:检查游戏状态(用户现在可以购买东西)。检查 player[0].money -> 没有奖金。
  • 客户端:server.buyItem('可以得到这个')
  • 服务器:检查游戏状态(用户现在可以购买东西)。检查 player[0].money,好的。 player[0].items.add('can get this') 这将降低 player[0].money 的成本。然后通知客户端 send(player[0], 'items', 'can get this');发送(玩家[0],'钱',玩家[0].钱)。

  • 另一种方法是记录客户端的 Action 并将其发送到服务器播放它的高分服务器。当然,这可能导致该记录非常大。

    最佳答案

    毫无疑问,对客户的盲目信任。在我正在开发的一个游戏中,我们现在将所有“业务逻辑”保留在服务器端,并且让客户端机器只向我们发送他们正在制作的命令;例如“玩家 B 想向右移动” - 但服务器计算他们向右移动了多远。这有性能开销(当然还有滞后问题,可以更好地处理),因此可能的中间立场是在客户端进行繁重的计算,并且仍然在服务器上进行检查;例如检查客户端的玩家是否在更新之间的时间内移动得比预期的多;即如果最大玩家速度为 200 单位/秒,如果您在 0.5 秒后收到更新说他们移动了 150 单位,请启动他们。

    当然,这并不一定会阻止某人编写机器人来发送这些按键,因此还有其他方法可以防止这种情况发生。尽管如此,根本没有验证在很大程度上是一个新手错误(无可否认,我在走捷径时犯了罪)

    关于network-programming - 多人/在线游戏编程中最常见的新手错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/617281/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com