![REST API 上的 NTP](https://linux22.com/image/729625/REST%20API%20%E4%B8%8A%E7%9A%84%20NTP.png)
我有一个运行 REST API 的应用程序,最近有人要求将 NTP 服务器与该应用程序关联。我的问题是,在 API 上设置一个用户可以查询的端点(即api/ntp/time
)并返回 NTP 数据包是否有意义,以及这样的设置意味着什么?
我一直在尝试使用 ntp 客户端(比如ntpdate
和 Python 的)连接到这个端点ntplib
,但这些客户端假设在端口 123 的 IP 地址上会有一个 NTP 服务器运行,过去几天的研究表明,这个假设对于大多数 NTP 客户端软件来说大体上都成立。
我使用端点来提供此信息有几个原因:
- 我无法控制应用程序的 Web 服务器配置,因此我无法从端口 123 或类似端口进行代理传递
- 我无法控制任何 Web 应用程序在哪些端口上运行
- 我没有真实的访问任何第 1 层设备;我们假设主机服务器保持其时钟与第 1 层设备适当同步(在我们的例子中这实际上是一个安全的假设)。
答案1
正如评论中所述,NTP 不适合通过 HTTP 进行代理。从您的评论来看,您需要一个在网络上运行的 NTP 服务器,以便没有板载时钟的设备可以与其同步。没有板载时钟的设备通常在启动时从 NTP 服务器设置时钟,并且许多设备都有允许它们保持同步的 NTP 客户端。板载时钟往往会漂移,因此建议对带有板载时钟的设备使用 NTP。
您的服务器应该运行 NTP 客户端,以便其时间准确。然后,您可以使用服务器时间来响应服务器的时间。我建议使用 UTC 或提供 UTC 偏移量(如果提供您当地时区的时间)。考虑使用 2018-10-16T19:20:30.45+01:00 这样的格式,其中包括秒的小数部分。由于延迟效应,使用此数据设置时钟的设备最终会比正确时间稍微慢一些。NTP 有纠正延迟的机制。