【发布时间】:2022-11-24 13:14:44
【问题描述】:
我正在尝试尽可能准确地同步客户端和服务器之间的时间。
我阅读了很多文章,其中大部分都推荐我们使用 NTP 时间同步,或基于流的协议,例如 TCP。
两者都需要客户端先询问服务器时间,并使用往返时间同步时间。
但我也开始知道,当我们使用具有相同时区 (UTC) 的 new Date 时,浏览器(客户端)和节点(服务器)输出相同的东西。
那么为什么我们需要同步客户端和服务器之间的时间呢?
分别使用UTC时区不是更好吗?
使用基于 NTP 的时间同步与在不同环境中使用具有相同时区 (UTC) 的 new Date() 相比有什么优势?
【问题讨论】:
-
不同的计算机可能有不同的时钟,用户的计算机可能有很大不同的时钟,不良用户可能会故意更改他们的时钟以引入错误或作弊等。使用共同的可信源可以解决这个问题,尽管人们有时仍然可以解决它,你应该始终假设每个客户都不可信任!
-
@AndrewCarter 感谢您的帮助。但是即使单独的设备使用相同的时区,它们也会彼此不同吗? stackoverflow.com/a/54701755/10851011
-
@koo 我认为你没有抓住要点:你永远不能信任远程客户端(并且时区无关紧要:始终只使用 UTC)
-
我现在可以将手机的时钟更改为 1940 年 11 月 1 日上午 9:00:)
-
设备怎么知道呢?设备无法凭空得出正确的时间。必须告诉时间。通常这发生在工厂,但不一定永远保持准确。甚至数字手表也会坏掉。 (关于人们故意更改设备时钟时间的观点也很好。如果许可证持续到 2021 年,而你将计算机设置为永久在 2020 年,你会想知道。)