【问题标题】:Synchronous countdown across users on MeteorMeteor 上跨用户的同步倒计时
【发布时间】:2017-08-30 22:23:46
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript meteor meteor-blaze


    【解决方案1】:

    永远不要相信客户。

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

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

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

    【讨论】:

    • 太棒了!这就是我要找的..我在这里有点新手,所以如果你可以添加一些sn-ps代码来实现这个,你会帮我很大的忙!
    • 你先试试,我写的所有内容都超出你的上下文......如果你在尝试时碰巧遇到问题或出错,请返回 SO 以获取有关特定代码的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 2021-07-25
    • 2021-11-07
    相关资源
    最近更新 更多