当前和未来的MMO JavaScript游戏如何阻止玩家欺骗系统?

时间:2014-04-09 00:57:51

标签: javascript validation real-time multiplayer

在线JS驱动的浏览器游戏似乎是游戏行业即将推出的新游戏,我对开发人员如何应对游戏环境中出现的以下特定问题提出了一些疑问:每个玩家都可以访问控制台可以动态操纵游戏。


物品和货币转移

通过游戏中的货币购买或销售,我们可以让服务器验证玩家存储的货币和库存数据以防止他的转移尝试,以确保他不会尝试转移资源他并不真正拥有。

我知道如何处理。


实时事件通讯

当一名球员处于战斗状态时,他可能会改变他所谓的等级并执行他尚未能力的动作或增加他的生命值,法术力等。

如果我们在将这些数据值流式传输到所涉及的每个客户端之前等待对这些数据值进行服务器验证,则会导致无法接受的延迟并打破实时流量。

了解这是如何处理的。


问题:

如何在具有实时交互功能的JS多人游戏中解决此问题?

1 个答案:

答案 0 :(得分:1)

对于任何类型的现代Web应用程序,其中更多逻辑被移动到客户端,安全性确实需要进行良好规划,实际上,您必须为有人可能为了恶意目的重写整个界面这一事实做好准备

你是对的,验证每个移动服务器端都会引入延迟,但正如上面的qwertynl所提到的,你可以使用websockets来最小化它。开发人员已经开发了具有实时通信(例如FPS)的多人游戏很长一段时间,因此您可以假设其中有大量的算法和策略可以最大化带宽并最大限度地减少延迟。如果您的游戏涉及任何类型的实时通信,您已经需要适当的低延迟解决方案,因此添加一些验证不是问题。

对于更多交易游戏,这变得更容易,因为没有必要是实时的。界面知道您的xp,mana等,因此当您执行操作时,应用程序会将操作添加到您的出站队列并做出响应,预测结果就好像操作成功一样。

当动作被发送到服务器时,如果实际结果与客户预期的结果不同,由于人们篡改了他们的法术力等级,失去了其他玩家的连接等,那么动作就不会被应用到你的内部服务器端游戏状态,服务器响应的游戏状态忽略了你过去的行为。

这种方法可能导致您正在玩的奇怪行为以及您过去几分钟游戏玩法消失的下一件事,但请记住,此验证是为了保护游戏免受滥用者和网络连接不良的影响,并且不会被大多数用户遇到。