4

我有两台可以通过串行连接相互通信的计算机。连接是通过无线网络进行的。两个系统之间的通信存在可变的、不断变化的延迟。在这两个系统上,我都有一个计数器运行时间,每毫秒递增 1。它们都在应用程序启动后立即启动。假设每台计算机在不同的时间启动。我如何与串行连接同步计数器,以便 systemA.counter 等于 systemB.counter 并且两个计数器同时增加(或尽可能接近)。

理想情况下,一旦同步,计数器只会慢慢地分开,以便每 3 或 4 千英寸我可以重新同步一次。

我正在寻找有关该主题的良好资源,例如算法、示例代码 (c/c++),以及任何可以为我指明正确方向的东西。

更新

这是一个封闭的系统,没有互联网。出于所有意图和目的,除了通过无线链路打开串行线路之外,根本没有真正的协议。目前该链接是蓝牙,但我正在考虑将其移至 ZigBee Mesh。当前有 2 个节点,但如果我有 30 个节点都运行同一个应用程序,我希望它们全部同步。没有指定客户端/服务器,只有几个设备运行带有计数器的相同程序。我无法访问时间之类的东西,只有这个每毫秒递增一次的计数器以及我可以使用的任何算法。

一旦我能做到这一点,我想建立一个建议和映射系统,但要弄清楚节点之间的距离,我需要在设备上同步启动时间。

4

2 回答 2

1

如果您使用此计数器对系统中的事件进行排序,则应查看矢量时钟Lamport 时间戳

于 2012-09-26T07:23:35.087 回答
1

显而易见的资源是 NTP,例如在http://www.eecis.udel.edu/~mills/ntp.html上记录了它,并在那里提供了链接。基本上,这使用时间戳来调整本地时钟运行的频率。该协议已经存在多年,并且一直是持续研究的主题——我看不到任何幻灯片,它们可以立即清楚地说明它是如何工作的。您可能会更好地查看是否已经有可用的 NTP 实现,而不是尝试自己重新实现它。

似乎(例如通过搜索)有一小部分人致力于时间同步算法,尤其是在无线传感器网络的背景下。除了搜索之外,一个起点是 http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.85.2012上的调查论文- 传感器网络中的时间同步:一项调查 (2004)

于 2012-09-26T03:55:16.923 回答