Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多人游戏NodeJS、HTML、JS-服务器/客户端验证_Javascript_Html_Node.js - Fatal编程技术网

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

Javascript 多人游戏NodeJS、HTML、JS-服务器/客户端验证,javascript,html,node.js,Javascript,Html,Node.js,我的问题更多的是验证游戏中的动作,游戏是跳棋。我正在开发一款跳棋游戏,使用html、css、js和nodeJS,游戏将是多人游戏 所以我的问题是关于验证,什么是最好的方法 现在所有的验证、有效移动等都是在客户端完成的,当然必须是服务器端 我的问题是,最好的方法是什么: 进行客户端验证时,如果验证正常,则将验证发送到服务器并在那里进行验证。如果一切正常,则更改下一个玩家的轮换。如果没有,则服务器拒绝移动,玩家必须执行有效的移动 没有客户端验证,只是基本的,所有的验证都是在服务器端完成的 场景1:我

我的问题更多的是验证游戏中的动作,游戏是跳棋。我正在开发一款跳棋游戏,使用html、css、js和nodeJS,游戏将是多人游戏

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

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

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

进行客户端验证时,如果验证正常,则将验证发送到服务器并在那里进行验证。如果一切正常,则更改下一个玩家的轮换。如果没有,则服务器拒绝移动,玩家必须执行有效的移动

没有客户端验证,只是基本的,所有的验证都是在服务器端完成的

场景1:我认为这是最好的,因为我们不太依赖服务器,如果移动客户端出错,那么它甚至不会将其发送到服务器,如果一个恶意修改代码的玩家试图做不好的移动,那么服务器会进行端验证

场景2:我们更加依赖服务器,它将消耗更多的资源,总体上对所有在线玩家来说都会更慢,但在客户端会更快一些,因为没有场景1中那么多的验证

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

更多安全性、客户端和服务器验证 减少其他玩家的延迟,因为只有来自客户端的经过验证的移动才会在服务器中得到验证 更少的资源=更少的基础设施,因此总体上更便宜。 你的意见是什么,或者你有更好的方法吗


谢谢大家的阅读。

我想说塞纳里奥1号更好

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


同时添加客户端验证,以防止向服务器发出不必要的请求,这也会增加玩家的等待时间。

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

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

我现在正在开发一个联网的JS game+引擎,并按如下方式处理此问题:

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

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

我之所以采用这种方法,主要是因为Gabriel Gambetta的这组非常有用的文章:

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


我通常更喜欢在服务器端进行验证,原因如下:

客户端未加载验证负担。 如果验证失败,后端会意识到,因此,故障会集中记录,并且您可以根据几个故障案例决定某些操作。留言?发送电子邮件?查看故障趋势? 更容易的代码调试。 客户端代码在安全方面不可信。 与游戏相关的是,无论如何你都必须发送更新,因此,如果你的代码都是服务器端的,那么你的代码将更易于管理,你可以优化它的各个方面。
提示:使用socket.io,非常容易掌握,非常可靠,支持服务器推送消息

客户端验证是为了方便,服务器端是为了安全;两者都有,每个人都会很开心,但我认为这更集中于像《反击战》这样的游戏,每一个ms都很重要。游戏是跳棋,像20毫秒这样的小延迟并不是什么大问题,因为这种延迟只发生在对手玩家身上,而不是实际移动棋子的玩家身上,因为客户端已经验证了所有的棋子并允许移动,然后服务器收到请求,如果都正常,则更改玩家回合,如果不是un,则玩家将客户端上交。True。这在FPS中是最重要的。我使用的是RTS方法,在RTS中,机组切换方向或活动之间的100 ms延迟是不明显的。尽管如此,我仍然相信有一位作家 tive服务器是最好的方法,也是为了防止作弊。另外,在每个客户机上复制相同的场景只是浪费时间。在回合制游戏中,绝对没有理由这样做,因为滞后不是问题。