5

我正在制作一个网络应用程序,我想显示消息从发送者到接收者所花费的时间。

您认为哪些方式适合实现此功能?

我的想法是将当前时间存储在消息上并与接收端的时间进行比较。尽管在 java doc 上它说当前给定的时间可能因操作系统而异。

我应该如何获取当前时间,以便在每个操作系统上都相同?(或者只是 OSX 并获胜)

ps:在大多数情况下,应用程序只是发送消息而不期望返回。

4

5 回答 5

3

除非源和目标都同步到同一个时间源,否则系统时间可能会相差几秒钟,如果源和目标位于不同的时区并且您使用本地时间,则甚至可能相差几个小时。

您可以做的是测量从发送数据包到收到回复的时间。这不是 100% 安全的,因为两个数据包可以通过两条不同的路线。

于 2012-04-08T14:36:54.727 回答
2

最好的方法是使用 NTP(网络时间协议)服务器来同步两台机器上的时间。您还可以从您的应用程序中查询 NTP 服务器并获取正确的时间,然后将其用于您的计算。

于 2012-04-08T14:40:07.243 回答
0

如果接收者是请求消息的人,那么您可以记录发出请求的确切时间以及消息返回的时间。它们之间的区别在于您正在寻找的结果。

于 2012-04-08T14:41:39.753 回答
0

约阿希姆是对的。除非两台机器都有与可靠时钟同步的时钟,否则您没有太多机会测量点对点消息所花费的时间。

你更擅长测量往返时间;即从发送消息到收到回复所经过的时间。您可以使用不与任何外部源同步的时钟来测量它。

于 2012-04-08T14:46:53.107 回答
0

TDOA(到达时间差)可能是您最准确的赌注。它不需要两台主机之间的时间同步,并且仍然为您提供非常准确的 RTT。

您基本上测量了 4 次不同的时间:

x1 = sender send time
y1 = receiver receive time
y2 = receiver send time
x2 - sender receive time

因此您可以通过减去接收器 (y) 的处理时间来计算 RTT:

x2 - (y2 - y1) - x1

对于 java 中最精确的当前时间,请使用 System.nanoTime();

于 2012-04-08T14:48:46.333 回答