Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/43.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 Node.js+;Socket.io实时游戏-跟踪时间_Javascript_Node.js_Sockets_Socket.io_Real Time - Fatal编程技术网

Javascript Node.js+;Socket.io实时游戏-跟踪时间

Javascript Node.js+;Socket.io实时游戏-跟踪时间,javascript,node.js,sockets,socket.io,real-time,Javascript,Node.js,Sockets,Socket.io,Real Time,我正在制作一个实时益智游戏,后端使用Node.js和Socket.io,前端使用Angular。我需要跟踪用户在拼图上花费的时间,并在他们完成拼图或之前时间用完时将其发送到后端。我不知道最好的办法是什么 我最初的想法是在客户端跟踪时间,这很容易做到。然后,我会在用户完成拼图或时间用完后发送时间。我认为这不是很安全,因为客户端可以很容易地降低他们的计算机速度或做其他事情来发送虚假数据 我的另一个想法是只跟踪服务器端每个套接字/播放器的时间。我还必须每隔一秒钟或其他时间向客户端发送一条消息来更新客户

我正在制作一个实时益智游戏,后端使用Node.js和Socket.io,前端使用Angular。我需要跟踪用户在拼图上花费的时间,并在他们完成拼图或之前时间用完时将其发送到后端。我不知道最好的办法是什么

我最初的想法是在客户端跟踪时间,这很容易做到。然后,我会在用户完成拼图或时间用完后发送时间。我认为这不是很安全,因为客户端可以很容易地降低他们的计算机速度或做其他事情来发送虚假数据

我的另一个想法是只跟踪服务器端每个套接字/播放器的时间。我还必须每隔一秒钟或其他时间向客户端发送一条消息来更新客户端。这种方式绝对安全,因为客户永远不会向我发送时间信息。但这种方法还有其他问题,这种规模如何

我的最后一个想法是结合使用这两种技术。例如,我在客户端有一个计数器,它向客户端显示时间,这样我就不必让服务器每秒“发出”一条时间消息。我会记录服务器端的时间,并简单地使用这些信息来更新分数等


谢谢

第三种选择对我来说绝对是最好的选择。因为您使用的是后端节点,所以可以像在浏览器中一样访问setTimeout。您可以使用它来安排在客户机的时间结束时向其发送事件,同时使用前端代码来显示剩余时间。您只需要确保在收到服务器上计时器已启动的确认之前,不会启动前端时钟,并且可能会稍微增加服务器超时,以确保在事情稍微不同步时不会欺骗您的播放器

你的第三个选择肯定是最好的。唯一的问题是:它必须精确到什么程度?我不知道人们是否会根据时间来竞争高分,但如果更高的延迟会导致更糟糕的时间,那就太糟糕了。就我个人而言,我相信你可以接受这个益智游戏,因为它会变得非常复杂。解决这个问题的一个方法是,首先接受(可能受污染的)客户端测量的时间,但使用服务器时间检查它,并留有一定的余量(例如+/-1秒)