游戏在浏览器.处理事件的位置:在前端或后端

Game in browser. Where process events: in frontend or in backend?

本文关键字:前端 后端 浏览器 处理事件 游戏 位置      更新时间:2023-09-26

我为浏览器开发简单的游戏。在这个游戏中,主要是洗牌方形(5x5)。
当用户按下某些按钮(方向键或方向键)时,方框的状态会发生变化。
我尝试在处理关键事件的前端(javascript)和后端(java)之间进行选择。

  1. 前端 (Javascript)
    在这种情况下,关键事件将在客户端浏览器中处理。所以它会很快。
    但是,它安全吗?用户可以以某种方式改变我的JS代码/文件在他自己吗??
  2. 后端> (Java)
    在这种情况下,关键事件将在服务器上处理。
    它够快吗?在这种情况下,我将通过ajax请求传输数据。

我很高兴听到哪种方法更好,为什么?哪种方法最常见?

p 。我比Javascript更了解Java

如果您决定在前端,您的用户当然可以更改Javascript并以任何他们想要的方式操作它。如果你绝对不想这样做,你可以在后台做,或者,我建议在这种情况下,两边都做。这意味着前端的用户体验和后端通过ajax调用。结果可以从前端代码立即显示出来,但最终结果来自服务器。实现这种行为的逻辑并不简单,但可能值得这样做。当用户可以为其他用户和自己更改资源时,通常使用这种方法。在这里,前端的即时响应为用户提供了良好的ui体验,而服务器仍然可以拒绝冲突的编辑。在您的情况下,您只需要一些验证代码。

但如果这只是一个游戏,为什么不只做前端呢?你在乎用户是否操纵了这个吗?或者是否存在服务器端组件?

简短的回答是,如果您担心代码的安全性,完全避免这种情况的最佳方法是在后端编写代码。以下是您可能应该考虑的其他一些事项的完整摘要:

速度:就像你在文章中指出的那样,前端代码几乎总是更快。这在很大程度上是因为网络请求需要时间来获得响应。如果你决定使用后端实现,你可以尝试通过减少数据包的大小来使它更快,但除非你开始寻找专业托管,否则你将受到主机互联网连接速度的限制,并且你将总是受到客户端连接速度的限制。

服务器负载:另一件要考虑的事情是您的服务器有多强大。如果它必须决定一个特定的行动是否合法,它能跟上吗?对于一个小项目来说,这不会是一个太大的问题,但这将是一个很好的实践,开始在你的脑海中保持这一点。只要你的游戏逻辑不是很庞大,那么将其全部放在前端代码中将有助于降低对服务器和网络连接的需求。

安全:就像我上面说的,在服务器端实现所有的逻辑是防止逻辑代码落入潜在黑客之手的最好方法,但是这里还有更多的内容。有人会有多大的动机在你的游戏中作弊?他们是否想要获得奖励或高分?如果你的游戏是多人游戏,或者有任何获胜奖励(除了"你赢了"屏幕或一些很酷的动画/声音),那么我会在服务器端执行它。如果不是,那么我不认为有理由担心代码安全性,因为作弊的动机大大减少了。此外,如果游戏中没有高分列表或其他玩家知道其他玩家游戏结果的方式,那么他们的作弊行为会对你或其他玩家产生什么影响?在大多数情况下,什么都没有。作弊者会觉得自己很"聪明",他们甚至会向朋友炫耀,但在大多数情况下,这对你的游戏完整性没有影响,因为他们并没有真正玩游戏:他们只是黑了游戏。他们失去了赢得游戏的体验,转而获得了破解代码的体验。一般玩家都不会这么做,而且很多这么做的人也不会继续从中找到乐趣,因为玩游戏已经没有意义了。

整体:

这两种方法都适用于小型游戏。最终取决于你自己;根据你对这个项目的个人目标做出决定。但还有一件事要说……您的选择不仅限于服务器端或客户端。你可以尝试同时实现这两种方法。这不是一个适合胆小的初学者的项目,它可能会涉及一些仔细的计划和专门的调试,但它会在很多领域提供很大的优势。您可以让客户端逻辑立即响应用户的操作,并提供不完全依赖网络请求的速度,同时让它向服务器发送异步请求以验证每个用户操作。在游戏结束时,服务器将其模拟结果与客户端的结果进行比较,如果它们匹配(并且没有违反规则),则游戏有效并可以得分。你会得到很好的速度和安全性。这有什么缺点吗?除了实现它会更加困难和复杂之外,它还会给服务器带来更多负载,因为每次移动都必须与最终结果一起进行验证。但是,如果您有一个足够好的服务器,这可能是"两全其美"的解决方案。