我正在使用后端的Node.js和Socket.io以及前端的Angular进行实时益智游戏。我需要跟踪用户在拼图上花费的时间,并在完成拼图后将其发送到后端,或者如果时间用完之前将其发送到后端。我不确定最好的办法是什么。
我最初的想法是跟踪客户端的时间,这很容易做到。然后,一旦用户完成拼图或时间用完,我就会发送时间。我认为这不会很安全,因为客户端很容易放慢计算机速度或做其他事情来发送虚假数据。
我的另一个想法是只跟踪每个套接字/播放器在服务器端的时间。我还必须通过在每秒或之后向客户端发送消息来更新客户端。这种方式绝对安全,因为客户端永远不会向我发送时间信息。但这种方法还有其他问题,这会如何扩展呢?
我的最后一个想法是使用两种技术的组合。例如,我将在客户端有一个计数器,向客户端显示时间,所以我不必每秒钟让服务器“发出”一个时间消息。我会跟踪服务器端的时间,并简单地使用该信息来更新分数等。
由于
答案 0 :(得分:0)
第三种选择对我来说绝对听起来不错。由于您在后端使用了Node,因此您可以像在浏览器中一样访问setTimeout。您可以使用它来计划在时间到期时向客户端发出的事件,同时使用前端代码显示剩余时间。您只是想确保在前端启动时钟,直到您收到服务器上已启动计时器的确认,并且可能会稍微填充服务器超时以确保如果事情稍微不同步,你就不会随时欺骗你的玩家!
答案 1 :(得分:0)
你的第三个选择绝对是最好的选择。唯一的问题是:它有多精确?我不知道人们是否会根据时间竞争高分,但如果更长的延迟会导致更糟糕的时间,那就太糟糕了。我个人认为你可以接受这个用于益智游戏,因为它会变得非常复杂。对此的一个解决方案可能是最初接受(可能受污染的)客户端测量时间,但检查它与服务器时间有一定的余量(例如+/- 1秒)。