5

私はネットワーク アプリケーションを作成しており、メッセージが送信者から受信者に移動するのにかかる時間を表示したいと考えています。

この機能を実装するのに適していると思われる方法は何ですか?

私が考えたのは、メッセージに現在の時刻を保存し、受信側の時刻と比較することです。Java doc では、指定された現在の時刻は OS によって異なる可能性があると書かれています。

すべてのOSで同じになるように現在の時刻を取得するにはどうすればよいですか? (または単にOSXと勝つ)

ps: ほとんどの場合、アプリケーションは単にメッセージを送信するだけで、何かが返されることを期待していません。

4

5 に答える 5

3

ソースと宛先の両方が同じ時刻ソースに同期されていない限り、ソースと宛先が異なるタイムゾーンにあり、ローカル時間を使用している場合、システム時刻は数秒、または数時間異なる場合があります。

できることは、パケットを送信してから応答を受け取るまでの時間を測定することです。2 つのパケットが 2 つの異なるルートを移動する可能性があるため、これは 100% 安全ではありません。

于 2012-04-08T14:36:54.727 に答える
2

最良の方法は、NTP (Network Time Protocol) サーバーを使用して両方のマシンの時刻を同期することです。また、アプリケーションから NTP サーバーにクエリを実行して、計算に使用できる正確な時刻を取得することもできます。

于 2012-04-08T14:40:07.243 に答える
0

ヨアヒムは正しいです。両方のマシンのクロックが信頼できるクロックと十分に同期していない限り、ポイント ツー ポイント メッセージにかかった時間を測定する機会はあまりありません。

往復時間を測定する方が適切です。つまり、メッセージを送信してから応答を受信するまでの経過時間です。これは、外部ソースに同期されていないクロックで測定できます。

于 2012-04-08T14:46:53.107 に答える
0

TDOA (Time Difference of Arrival) は、おそらく最も正確な賭けです。2 つのホスト間で時刻を同期する必要はありませんが、かなり正確な 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 に答える