首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多人游戏NodeJS,HTML,JS -服务器/客户端验证

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

Stack Overflow用户
提问于 2018-05-16 09:11:26
回答 3查看 731关注 0票数 0

我的问题更多的是关于游戏中动作的验证,游戏是检查者。我正在开发一个车臣游戏,在html,css,js和nodeJS,游戏将是多人游戏。

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

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

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

  1. 拥有客户端验证,如果验证是确定的,那么将验证发送到服务器,并在那里验证它,如果下一个播放器的一切正常更改,如果不是,服务器拒绝移动,玩家必须做一个有效的移动。
  2. 没有客户端验证,只有基础,所有验证都是服务器端完成的.

场景1:我认为这是最好的,因为我们不太依赖于服务器,如果移动客户端出错了,那么它甚至不会将其发送到服务器,如果有不良意图的玩家(修改代码)试图执行错误的动作,那么服务器就会进行侧验证。

场景2:我们更多地依赖于服务器,它将消耗更多的资源,对所有在线玩家来说都要慢一些,但是在客户端它会“更快”一点,因为没有场景1那么多验证。

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

  • 更多的安全性、客户端和服务器验证
  • 其他玩家的延迟较小,因为只有来自客户端的已验证动作才能在服务器中得到验证。
  • 更少的资源=更少的基础设施,所以整体上更便宜。

你的看法是什么,还是你有更好的方法?

谢谢大家的阅读。

EN

回答 3

Stack Overflow用户

发布于 2018-05-16 09:43:02

这个问题可能有点过于开放和基于意见,但下面是这样说的:

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

我正在开发一个联网的JS游戏+引擎,如下所示:

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

这意味着,如果一个事件是在插值开始时触发的,并且直到下一个状态广播时才向其他客户端广播,则客户端最多可以体验1勾值的滞后。这可能是200毫秒左右,它变得引人注目,但这在我的经验是相当可以容忍的。

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

I.客户端-服务器游戏体系结构

二、客户端预测与服务器协调

三.实体插值

四.滞后补偿

显然,我不能包括所有的文章,但我上面所写文章的要点是在第一篇文章中的这张图片中:

票数 2
EN

Stack Overflow用户

发布于 2018-05-16 09:23:10

我会说1号老师更好。

您需要使用这两种类型的验证。当用户单击时,通过javascript验证在客户端显示移动,并在后台将移动代码发送到服务器进行验证,这样坐在另一个服务器上的玩家就可以看到它。无论如何,您必须将数据发送到服务器,以便其他玩家可以看到播放机的移动。

添加客户端验证,以防止不必要的请求到服务器,这也将增加等待时间的播放器。

票数 0
EN

Stack Overflow用户

发布于 2018-05-16 09:45:14

我通常倾向于在服务器端进行验证,原因如下:

  • 客户端没有加载验证负担。
  • 如果验证失败,后端就会知道,故障集中记录,您可以在几个故障情况下决定某些操作。(发消息?发邮件?看到失败趋势了吗?)
  • 更容易进行代码调试。
  • 就安全而言,客户端代码不值得信任。
  • 与游戏相关,你无论如何都要发送更新,所以如果你的代码是服务器端的话,你的代码会更容易管理,并且你可以优化它的各个方面。

提示:使用socket.io,非常容易掌握,非常可靠,支持服务器推送消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50366749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档