Java Instant.toEpochMilli() & Javascript Date.now() 不同步



我正在尝试收集客户端上的性能指标,用于通过websockets来自服务器进程的流定价数据。服务器是用Java编写的,客户端是一个Angular UI应用程序。服务器和客户端都是内部编写的,并且都在同一组织的网络中。数据在250毫秒内失效,我们测量了几个参数,其中一个是网络滞后。

服务器在消息头上标记sentAtTime,就在它离开服务器之前使用Java的Instant.toEpochMilli()。客户端在接收到消息后立即使用Javascript的Date.now()记录receivedAtTime。

然后计算导线上的时间为NetworkLag = receivedAtTime - sentAtTime

令人惊讶的是,延迟是负的,有时高达-30毫秒,这让我感到困惑。我已经检查了数学没有错,我也得到了正滞后值。我能想到的唯一解释是服务器和客户端的时钟不同步。其他人是否看到过类似的情况?我可以采取哪些措施来纠正这种情况?

有一种方法可以计算出服务器和客户机之间的时差,尽管存在网络延迟的影响。看看NTP是如何工作的。它通过滞后的互联网同步系统时钟,并打算解析到毫秒级的偏差。

从维基百科:

NTP旨在将所有参与的计算机同步到一个协调世界时(UTC)的几毫秒。它使用交叉算法,是马祖罗算法的改良版算法,以选择准确的时间服务器,并设计缓解可变网络延迟的影响。

最新更新