首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时间同步码

时间同步码
EN

Stack Overflow用户
提问于 2009-11-03 03:31:40
回答 3查看 752关注 0票数 0

我正在写一些代码,需要知道客户端和单个服务器的时间有多不同步。

我尝试通过在服务器上托管的SMB共享上创建一个临时文件并读取其上次修改时间来完成此操作。我认为(可能是错误的)时间戳将由服务器而不是客户端生成。因为看起来客户可能真的会把事情搞砸。

有没有人能证实这一行为,或者想出一种不同的方式来做这件事?

EN

回答 3

Stack Overflow用户

发布于 2009-11-03 03:37:53

为什么不在客户端获取纪元时间,并在客户端开始与服务器通信时将其发送到服务器,这样就不需要smb共享了。通过比较各个时期的时间,您将获得以秒为单位的时间偏移量。可以使用rest/soap、socket等在客户端和服务器之间进行通信,这取决于您的客户端/服务器模型。

票数 2
EN

Stack Overflow用户

发布于 2009-11-03 04:11:47

您可以在一个通用的NTP服务器上同步这两个服务器,而不用担心它。增加了拥有(更多)正确时钟的好处!

票数 2
EN

Stack Overflow用户

发布于 2009-11-03 03:54:34

我猜这里涉及的可变延迟(例如IO)是关键问题。你想要的衡量标准有多好?我也不确定这(严格地说)是否与Java有关。

无论如何,我认为你需要一个比较操作。

两台不同的机器正在向共享设备(您的中小型企业)写入数据,并且每台机器都创建一个包含their epoch的文件。理想情况下,为了最大限度地减少延迟问题,您可能希望在写入之前获取此纪元,然后立即关闭该文件。

然后,客户端将自己的纪元和文件时间戳与服务器的文件及其纪元内容进行比较。这4个度量应该提供足够的信息,以便深入了解两个JVM的时间段之间的相对差异。

编辑以澄清

例如,服务器的元组是({epoch,ts}):{S_t,SMB_ts},而客户端是{C_S_t,SMB_C_ts}。假设你得到(有趣的数字) {5000,4800}和{5100,5000}。取服务器的时间戳和客户端的时间戳之间的差值(这里是4800 - 5000 => -200),然后添加到客户端的纪元(这里是5100+(-200)=>4900)。因此,客户端比服务器落后100个单位。

最终编辑:(请注意,这里有3个时钟需要处理:SMB时钟、服务器时钟和客户端时钟。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1663193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档