gpt4 book ai didi

javascript - 多人游戏 NodeJS、HTML、JS - 服务器/客户端验证

转载 作者:行者123 更新时间:2023-12-03 01:52:21 25 4
gpt4 key购买 nike

我的问题更多地与游戏中 Action 的验证有关,游戏是西洋跳棋。我正在开发一个跳棋游戏,使用 html、css、js 和 nodeJS,该游戏将是多人游戏。

所以我的问题是关于验证,最好的方法是什么。

现在所有验证(有效移动等)都是在客户端完成的(当然必须是服务器端)。

我的问题是,最好的方法是什么:

  1. 进行客户端验证,如果验证正常,则将验证发送到服务器并在那里进行验证,如果一切正常,则更改下一个玩家的回合,如果不是,服务器拒绝移动,玩家必须做一个有效的 Action 。

  2. 没有客户端验证,只有基础验证,所有验证均在服务器端完成。

场景1:我认为这是最好的,因为我们不太依赖服务器,如果移动客户端错误,它甚至不会将其发送到服务器,如果玩家有恶意(修改代码)尝试在具有侧面验证的服务器上进行不良 Action 。

场景2:我们更加依赖服务器,它会消耗更多的资源,并且对于所有在线玩家来说都会变慢,但在客户端会稍微“快”一点,因为没有那么多资源验证如场景 1 所示。

我认为场景 1 是最好的方法,因为:

  • 更高的安全性、客户端和服务器验证
  • 减少其他玩家的延迟,因为只有来自客户端的经过验证的移动才会在服务器中进行验证
  • 更少的资源 = 更少的基础设施,因此整体成本更低。

您的意见是什么,或者您有更好的方法吗?

感谢大家的阅读。

最佳答案

这个问题对于 SO 来说可能有点过于开放式和基于意见,但这里是:

就我个人而言,我认为让客户端充当游戏服务器的“观察者”是理想的。游戏服务器应该是权威的,并完成所有逻辑以确保一致性。

我现在正在开发一个联网的 JS 游戏 + 引擎,处理方式如下:

服务器向所有客户端广播 2 个带有时间戳的游戏状态。然后,每个客户端在状态 nn+1 之间进行插值。在此期间,任何用户输入都会发送回服务器,然后合并到状态 n+1n+2 中,并在下一次广播中发送。当客户端在插值中达到 n+1 时,n+1 将使用新的 n+1n 对进行校正+2

这意味着,如果在插值开始时触发事件并且在下一次状态广播之前不广播到其他客户端,则客户端最多可能会经历 1 个刻度的延迟。这可能需要大约 200 毫秒才会变得明显,但根据我的经验,这是相当可以忍受的。

我之所以采用这种方法,很大程度上要归功于 Gabriel Gambetta 撰写的这组非常有用的文章:

I. Client-Server Game Architecture

II. Client-Side Prediction & Server Reconciliation

III. Entity Interpolation

IV. Lag Compensation

显然我无法包含所有文章,但我上面所写内容的要点在第一篇文章的这张图片中:

enter image description here

关于javascript - 多人游戏 NodeJS、HTML、JS - 服务器/客户端验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50366749/

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