1

実行時にネットワークスループットを最適に測定する方法を考えています。私はクライアント/サーバーアプリケーションを書いています(両方ともJavaで)。サーバーは、(圧縮されたメディアデータの)メッセージをソケットを介してクライアントに定期的に送信します。サーバーが使用する圧縮レベルをネットワーク品質に合わせて調整したいと思います。

そこで、大量のデータ(たとえば、500kb)がクライアントに完全に到達するまでにかかる時間を測定したいと思います。これには、その間のすべての遅延も含まれます。Iperfのようなツールは、独自のトラフィックを作成して測定を行うため、オプションではないようです。

私が思いついた最善のアイデアは、クライアントとサーバーのクロックの違いを何らかの方法で判断し、サーバーが各メッセージにタイムスタンプを送信するようにしてから、このタイムスタンプとクライアントが受信した時間の違いをサーバーに報告することです。メッセージ。サーバーは、メッセージがクライアントに到達するまでにかかった時間を判別できます。

これを行う簡単な方法はありますか?このためのライブラリはありますか?

4

1 に答える 1

1

簡単な解決策:

定義された量のパッケージを送信する前に、サーバーにタイムスタンプを保存します。

次に、パッケージをクライアントに送信し、クライアントが最後のパッケージを受信したときにサーバーにレポートを返すようにします。

クライアントが応答したときに、サーバーに新しいタイムスタンプを保存します。

あとは、RTT を決定し、2 つのタイムスタンプの差から RTT/2 を差し引くだけです。

これにより、かなり正確な測定値が得られるはずです。

于 2011-10-23T20:00:16.390 に答える