确保最准确的同步

首先我会解释我的问题:我有一个node.js服务器和大量的通过socket.io接收事件的JS客户端。 Web应用程序将结束date(时间戳)发送到node.js服务器,node.js将此时间戳广播给所有客户端。 然后,客户从现在开始计时到给定date。

我的问题是:我的客户想要一个完全同步的应用程序,所以每个客户端必须在每个时刻都有相同的计时器计数。但是每个客户端都没有相同的当前date,所以有不同的计时器计数。

我的第一个解决scheme:我的networking应用发送他的当前时间戳与每个请求,所以,node.js广播这个时间戳。 然后,每个客户端比较他的当前时间戳与服务器的时间戳,并将差异应用到他的计时器…

结果:更好但不完美。 有些定时器不是同步的(由于请求延迟在我看来),我看到一些毫秒(不到一秒)的差异。

那么,你有提案来改进计时器吗?

谢谢大家。

由于networking中的节点之间的不可知的传输延迟,分组交换networking上的时间同步是一个难题。 我的build议是:不要试图自己解决这个问题。 只要求服务器和所有的客户端都运行NTP,并且有一个良好的configuration,使他们能够同步时间与良好的可靠的来源。 让NTP担心这个问题。