我有两台计算机可以通过串行连接相互通信。连接通过无线网络进行。两个系统之间的通信存在可变的,变化的延迟。在两个系统上,我都有一个计数器运行时间,每ms增加1。它们都会在应用程序启动后立即启动。假设每台计算机在不同时间启动。如何使用串行连接同步计数器,以便systemA.counter等于systemB.counter,以便两个计数器同时递增(或尽可能接近)。
理想情况下,一旦同步,计数器只会缓慢地分开,这样每3或4千个incs就可以重新同步一次。
我正在寻找关于这个主题的好资源,例如algorythms,示例代码(c / c ++),以及指向正确方向的任何事情。
更新
这是一个封闭的系统,没有互联网。除了所有意图和目的之外,没有真正的协议,并且通过无线链路打开串行线路。目前的链接是蓝牙,但我正在考虑将其移动到ZigBee Mesh。目前有2个节点,但是如果我有30个节点都运行同一个应用程序,我希望它们全部同步。没有客户端/服务器指定,只有几个设备与计数器运行相同的程序。我无法访问任何类似时间的东西,只有这个计数器会增加一毫秒,无论我采用什么算法。
一旦我能够实现这一点,我想建立一个预定和映射系统,但为了计算节点之间的距离,我需要在设备上同步驱动时序。
答案 0 :(得分: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年)
答案 1 :(得分:1)
如果您使用此计数器对系统中的事件进行排序,则应该查看vector clocks或Lamport timestamps。