【问题标题】:Method for syncing interval functions over separate devices在不同设备上同步间隔函数的方法
【发布时间】:2015-06-01 13:09:10
【问题描述】:

我正在尝试在不同的设备上预编程一个间隔函数,以便彼此同步。所以几个移动设备都在同步运行相同的间隔函数。起初我以为我可以只使用设备内部时钟并在分钟的 0 开始功能。我现在意识到移动时钟并不是真的那么准确,并且彼此之间没有同步。现在我需要一个新的解决方案。

如果有帮助的话,我正在使用 heroku、node.js、socket.io 和 ionic。

【问题讨论】:

  • 您真正想要解决的最终问题是什么?而且,同步需要多精确(以毫秒为单位)?
  • 我正在尝试获得一种在不同设备之间同步的变色效果,以便它们同时变为相同的颜色。尽可能准确会很好,但我会接受不到 200 毫秒。

标签: node.js heroku socket.io


【解决方案1】:

从概念上讲,您可以执行以下操作:

  1. 让每个客户端建立一个时间参考与一个公共服务器。
  2. 在不久的将来要启动变色效果时,向每个客户端发送带有特定时间戳的变色消息。
  3. 当每个客户端收到颜色更改消息时,它会在未来的短时间内查看计划的时间戳,更正时间参考并根据自己的时钟安排事件。
  4. 当每个客户端到达该时间时,每个客户端开始播放事件。

这将与您在第 1 步中建立的时间参考一样准确,而这正是棘手的部分所在,并且确定了缺乏准确性的准确性。在这篇文章中有一种方法的描述:Measuring time difference between networked devices

一旦您在客户端时钟和参考时钟之间建立了时间增量,您就可以在本地存储该增量,然后您可以将该增量应用到来自服务器的任何未来时间指令。因此,如果您收到在 12:30:05.00 执行某些操作的指令,但您的客户端时钟被测量为比服务器参考快 +12.33 秒,那么您将从计划时间中减去 +12.33 秒,然后设置一个计时器,在本地时钟的 12:29:52.67 触发。

您可以通过发送未来特定时间的指令来处理每个客户的运输时间可能不同的事实。您可以选择未来的任何时间,但它不能比任何客户的最长运输时间更长。您还可以从每个客户端测量它并将其报告给服务器,或者如果您有足够的时间提前安排,您可以至少提前几秒钟发送带有指令的消息(比任何传输时间都可能更长)处于正常运行状态)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    相关资源
    最近更新 更多