问题标签 [clock-synchronization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3934 浏览

java - Java 是否有现成的时钟同步解决方案?

我们有一个大型的高性能软件系统,它由多个交互的 Java 进程(不是 EJB)组成。每个进程可以在同一台机器上,也可以在不同的机器上。

某些事件在一个进程中生成,然后以不同的方式传播到其他进程以进行进一步处理等等。

出于基准测试的目的,我们需要创建每个事件何时通过“检查点”的日志,最终将这些日志组合起来以获得每个事件如何通过系统传播以及延迟多少的时间线(当然,进程切换和 IPC 添加延迟,没关系)。

当然,问题在于时钟同步。所以这是我的问题:

1)如果所有进程都在同一台机器上,是否保证 currentTimeMilis 在调用时是准确的?ITP的错误有一定的界限吗?

2)如果某些进程可能在不同的机器上,是否有用于时钟同步的现成解决方案(也是免费或开源的)?我最好寻找一种可以绕过操作系统(Windows 或 Linux)并直接从 Java 工作的解决方案。我还理想地寻找可以以微秒精度运行的东西。我考虑过 NTP,但我不确定它是否可以通过 Java 而不是通过操作系统获得,而且我不确定它的复杂性。

3)有没有办法确定在特定配置(或我最终使用的任何解决方案)中使用 NTP 的误差范围,以便我可以在计算延迟时给出误差范围?

谢谢!

0 投票
9 回答
75358 浏览

javascript - 将客户端 javascript 时钟与服务器日期同步的最佳方法

我的任务是在某个固定时区(MSK 或 MSD - 取决于当前日期)的 HTML 页面上显示数字时钟(精确到分钟)。我想避免依赖客户端系统时钟,因此需要与服务器进行一些同步。HTTP 服务器在每个响应中发送 Date 标头,因此我们可以向我们网站的任何 URL 发送 AJAX GET 或 HEAD 请求以获取服务器日期,计算与客户端日期的差异,并在使用 setTimeout() 更新时钟时使用它。还有其他问题:日光设置的时区切换,连接速度非常慢的延迟。

以最简单的方式完成这项任务的任何想法?我宁愿在没有服务器端编程的情况下解决它。

0 投票
0 回答
156 浏览

silverlight - 如何从 WCF 消息中删除时间信息?

我试图为 Silverlight 客户端中使用的安全服务设置 maxclockskew。

我尝试过的事情已在相关帖子中进行了总结 如何在 HTTPS Silverlight 应用程序上下文中修复 WCF maxClockSkew 问题?

由于我也没有办法做到这一点,现在我还想删除时间信息,以便跳过时钟偏差验证。它是如何完成的?只是将 InclueTimestamp 设置为 false 不起作用。

0 投票
8 回答
32144 浏览

javascript - 使用服务器和系统时间在网页上计时?

我需要在网页上添加时钟。时钟需要与服务器同步,但我真的不想让它不断检查服务器,因为该页面将在多台 PC 上 24/7 全天候打开。有没有办法从服务器获取时间,然后使用系统时钟来保持更新并每 15 分钟左右检查一次服务器以保持同步?

0 投票
2 回答
7696 浏览

cloud - 如何跨多个节点在云(AWS、heroku 等)中建立时钟同步?

我想在云中运行一个大型节点集群(AWS、Heroku,或者可能是自我管理的 VMS),其时钟必须与预定义的容差同步。我正在寻找可能 200 毫秒的容差。这意味着如果我有 250 个节点,那么 250 个节点之间的最大时钟差不应超过 200 毫秒。我并不真正关心与世界相关的实际日期/时间。解决方案必须是容错的,并且不应该依赖于任何一个系统的时钟的准确性——事实上,很可能没有一个时钟会非常准确。

如果由于任何原因确定时钟同步对于任何特定节点不可靠,则要求足够强,由于时钟不同步,我宁愿从集群中删除一个节点 - 所以对于任何可疑的故障,我会希望能够对该节点执行某种类型的受控关闭。

我很想使用 NTP 之类的东西,但根据 NTP已知问题 twiki

NTP 并非设计为在虚拟机内部运行。它需要一个高分辨率的系统时钟,对时钟中断的响应时间具有很高的精度。没有已知的虚拟机能够满足这些要求。

尽管同一个 twiki 然后描述了解决这种情况的各种方法(例如在主机操作系统上运行 ntp),但我不相信我有能力使用 AWS 或在 horoku 上修改环境以遵守解决方法。

即使我没有在 VM 中运行,一位具有多年运行 ntp 经验的值得信赖的运营经理告诉我,由于本地时钟漂移不时,ntp 可以并且将会放弃同步(或明显弄错时间)。它不会经常发生,但确实会发生,并且随着您增加机器,您会增加发生这种情况的机会。AFAIK,检测你离你有多远需要停止 ntpd,运行查询模式命令,然后重新启动它,并且可能需要很长时间才能得到答案。

总结一下——我需要一个时钟同步,其主要目标如下:

  • 在操作控制受限的虚拟机中运行良好(即:“云服务提供商”)
  • 集群中所有参与者之间的时间容差约为 200 毫秒
  • 能够检测坏节点并以积极的方式对其做出反应
  • 容错(无单点故障)
  • 可扩展(当您添加更多节点时,事情不会倒下——绝对避免 n^2)
  • 可支持数百个节点
  • 任何节点都不应被认为具有优于任何其他节点的时间概念
  • 整个集群漂移(在合理范围内)是可以的——只要它一致漂移

从描述来看,伯克利算法似乎是正确的选择,但它已经实现了吗?

很高兴拥有:

  • 最少的配置(节点自动注册参与)——对于启动新节点很重要
  • 报告参与时钟同步的节点以及相对时间偏移量的 HTML 仪表板或(REST?)API
  • 漂亮的图表?
0 投票
1 回答
1949 浏览

javascript - 从 Web 浏览器获取 JavaScript 中服务器时间的最快方法是什么?

事实上,我想将客户端时间与服务器时间同步,这个解决方案确实不错,但是还有其他更快的想法吗?换句话说,我们能否找到一种更快的方法来从 Web 浏览器获取 JavaScript 中的服务器时间?

0 投票
3 回答
8350 浏览

vhdl - VHDL 中具有 2 个时钟的 FIFO

我对 vhdl 分配有疑问。我需要在一条 500MHz 的总线和另一条 30MHz 的总线之间创建一个 FIFO 缓冲区。

我设计了一个基本的FIFO缓冲区

输入:Data_in、Write_EN、CLK_500、Read_EN、CLK_30、FlushFIFO。

输出:Data_out、FULL、EMPTY。

此缓冲区是使用 2D 数组设计的:

问题如下:我应该如何编写进程并在它们之间维护一个指针以进行同步?用我试过的方法,代码不会合成(ERROR:XST:827 Signal ptr cannot be synthesis)

有任何想法吗?

谢谢并恭祝安康

0 投票
2 回答
1706 浏览

amazon-web-services - 如何与亚马逊网络服务同步时间

我在使用 AWS API 和 Cloudberry Explorer 时遇到了很多问题。例如,在 Cloudberry 资源管理器中,我得到:

您的计算机时钟未同步。出于安全原因,当您的时钟不同步时,亚马逊会生成错误。查看 http://wwp.greenwichmeantime.com/以同步您的时钟。

我不知道如何解决这个问题。你能告诉我为了让我的笔记本电脑上的时钟与亚马逊的时钟同步需要做的步骤吗?

我联系了黑莓,他们给我指出了一个没有解释如何做的页面。我被困住了。在这方面需要你的帮助。谢谢。

谢谢。

0 投票
1 回答
665 浏览

google-app-engine - 由于缺少服务器时钟同步,AppEngine 推送队列中的任务执行 ETA

AppEngine 推送队列允许安排任务以供将来执行(如果添加了该TaskOptions.etaMillis(...)选项)。此方法需要一个long参数,该参数以绝对毫秒为单位指定执行任务的时间,正如System.currentTimeMillis().

鉴于 AppEngine 不保证服务器时钟同步,并且时钟可能会以 HOURS 的顺序关闭!!!(请参阅0:36:07 的“Google I/O 2010 - 使用 Google App Engine 的数据管道”),这怎么可能可靠?

让我们考虑以下示例:

  • 一个 http 请求进来并被路由到一个时钟恰好提前 30 分钟的实例
  • 在请求处理期间,我想将一些批处理推迟到后台任务
  • 我希望在大约 10 秒内将结果报告给用户
  • 所以,我用 ETA 来安排任务System.currentTimeMillis() + 10,000
  • 考虑到 30 分钟的时钟偏差,这个 ETA 实际上对应于从现在开始的 30 分 10 秒
  • 因此,如果任务现在由不同的实例处理,它可能会暂停超过 30 分钟
  • 不用说,对于用户来说,我的服务似乎已经死了

这是否在底层 API 中以某种方式阻止?如果没有,Task ETA 怎么可能有用呢?是否必须将 ETA 指定为相对时间而不是绝对时间才能使其正常工作?

真正可悲的是,实际上有一个调用的函数TaskOptions.countdownMillis(...)确实需要一个相对时间,但是查看 最终处理该值的源代码,可以看到它只是简单地转换为基于相同高度不可靠的绝对时间规范System.currentTimeMillis()

更糟糕的是:如果您不指定 ETA 或倒计时,此函数仅使用当前系统时间而不是 0,因此即使您希望立即执行的任务也可能最终会暂停一个小时或更长时间!

这是一些重大错误还是我错过了什么?

此外,这同样适用于Pull Queues中的 Tasks 租约,对吗?

0 投票
1 回答
890 浏览

c - 如何在两个不同的进程之间同步时间?

我想在两个不同的 linux 机器中运行的两个进程之间发送一些帧。我想知道每秒接收多少帧。所以从 machine1 上的 process1 开始,我给帧加上时间戳,然后 machine2 上的 process2 接收它。它将检查时间戳并计算到达 process2 所需的时间。

但是这两台机器上的时间并不完全相同,可能有1秒的不同,那么如何获取帧到达machine2上的process2的时间呢?