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