Meteor上用户的同步倒计时

时间:2017-08-30 14:16:36

标签: javascript meteor meteor-blaze

我正在开发一个多人游戏(用于科学实验),参与者参与20轮互动决策。每轮有3个阶段,每个阶段应持续30秒。我想知道实施倒计时会有什么好方法。

目前,我正在使用客户端方法。在创建圆形模板时,我使用客户端计时器,当参与者达到0时提交参与者的答案。到目前为止工作正常(因为每个人都在同一时间开始游戏,并且下一轮开始后才开始每个人都提交了答案)。我不确定这是一个很好的方法,考虑到参与者可能会断开连接(离线,关闭浏览器,出现连接问题)并可能操纵会话或其他事情。

做服务器端计时器会更好吗?例如,包含计时器的集合,参与者是否订阅该集合?如果是这样,如何实现服务器端倒计时?此外,这种方法是否会对服务器产生很高的要求,因为倒计时中的每一秒(我们在模板中显示)都需要监听服务器上的数据?

1 个答案:

答案 0 :(得分:2)

永远不要相信客户。

考虑到这一点,我们需要找到一种方法让客户端根据服务器选择的时间显示剩余时间...首先,服务器在创建轮次时设置轮次的结束时间(或开始时间+持续时间)。

现在每个人都拥有与服务器相同的结束时间,我们需要将它们与服务器时间同步。让我们使用mizzao:timesync它非常简单,它接收服务器时间,并创建与客户端时间的差异。监控客户端时间以确保不会发生奇怪的时钟变化,甚至考虑延迟。这可能比你需要的多一点,但它已经完成了,所以我们的工作就少了!

现在我们知道当前的服务器时间和圆形结束时间,我们可以轻松地显示剩余时间!如果玩家在断开连接或刷新后回来,这两个时间仍然有效,他们将能够继续游戏。