首先我会解释我的问题: 我有一个node.js服务器和很多通过socket.io接收事件的JS客户端。 Web应用程序将结束日期(时间戳)发送到node.js服务器,node.js将此时间戳广播到所有客户端。然后客户从现在开始到给定日期启动计时器......
我的问题: 我的客户想要一个完全同步的应用程序,因此每个客户端在每个时刻都必须具有相同的计时器数...但是每个客户端没有相同的当前日期,因此存在不同的计时器计数。
我的第一个解决方案: 我的网络应用程序发送每个请求的当前时间戳,因此,node.js广播此时间戳。然后,每个客户端将其当前时间戳与服务器的时间戳进行比较,并将差值应用于他的计时器......
结果: 它更好但不完美。有些计时器不同步(由于我认为请求延迟),我看到一些毫秒(不到一秒)的差异。
那么,你有建议改进计时器吗?
感谢每一个人。
答案 0 :(得分:1)
分组交换网络上的时间同步是一个难题,因为网络中节点之间存在不可知的传输延迟。我的建议是:不要试图自己解决这个问题。只需要服务器和所有客户端都运行NTP,其配置良好,使它们能够与良好可靠的源同步时间。让NTP担心这个问题。