我正在制作一个网络应用程序,我想显示消息从发送者到接收者所花费的时间。
您认为哪些方式适合实现此功能?
我的想法是将当前时间存储在消息上并与接收端的时间进行比较。尽管在 java doc 上它说当前给定的时间可能因操作系统而异。
我应该如何获取当前时间,以便在每个操作系统上都相同?(或者只是 OSX 并获胜)
ps:在大多数情况下,应用程序只是发送消息而不期望返回。
除非源和目标都同步到同一个时间源,否则系统时间可能会相差几秒钟,如果源和目标位于不同的时区并且您使用本地时间,则甚至可能相差几个小时。
您可以做的是测量从发送数据包到收到回复的时间。这不是 100% 安全的,因为两个数据包可以通过两条不同的路线。
最好的方法是使用 NTP(网络时间协议)服务器来同步两台机器上的时间。您还可以从您的应用程序中查询 NTP 服务器并获取正确的时间,然后将其用于您的计算。
如果接收者是请求消息的人,那么您可以记录发出请求的确切时间以及消息返回的时间。它们之间的区别在于您正在寻找的结果。
约阿希姆是对的。除非两台机器都有与可靠时钟同步的时钟,否则您没有太多机会测量点对点消息所花费的时间。
你更擅长测量往返时间;即从发送消息到收到回复所经过的时间。您可以使用不与任何外部源同步的时钟来测量它。
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();