2008-09-17 12 views
1

クライアントがリクエストを待つ時間を測定する方法を教えてください。サーブレットからの合計ネットワーク転送時間を測定する

サーバー側では、たとえばフィルタを使用して簡単です。 しかし、レイテンシやデータ転送を含めた合計時間を考慮したい場合、それは難しくなります。

基本となるソケットにアクセスして、要求がいつ終了したかを確認できますか? またはJavaScriptのトリックを行う必要がありますか?ブラウザーとサーバー間のクロック同期によってこのタスクのためのプレマイドのjavascriptはありますか?

答えて

2

クライアントが純粋にサーバー側からどれだけ待たなければならないかを知る方法はありません。 JavaScriptが必要です。

クライアントとサーバーのクロックを同期させたくないというのは、それが過剰です。クライアントが要求を出してから応答を表示するまでの時間を測定するだけです。

クライアントがAJAXの場合、これは非常に簡単です:新しいDate()。getTime()を呼び出して、要求が行われた時間をミリ秒単位で取得し、結果が解析された後の時間と比較します。次に、このタイミング情報をバックグラウンドでサーバーに送信します。

非AJAXアプリケーションの場合、ユーザーがリクエストをクリックすると、JavaScriptを使用して(クライアントの視点から)現在のタイムスタンプをクエリとともにサーバーに送信し、同じタイムスタンプを結果のページがリロードされたときのクライアント。そのページのonLoadハンドラで、経過時間の合計を測定してから、XmlHttpRequestを使用するか、サーバーへの次の要求に対する余分な引数をタックして、サーバーに返します。

+0

このアプローチの問題は、既存の非Ajax実装に透過的に追加することはできません。 リクエストごとに追加の日付パラメータを追加するのは難しいでしょうが、このメソッドは、クライアント/サーバクライアントからの旅行にかかる時間を実際に測定するように聞こえます。 –

0

0バイトのソケット送信バッファを設定することができます(と私はこれをお勧めしません)ので、HttpResponse.send()への呼び出しをブロックするときに、時間は含まれていません。 Ekk - 私はそれに言及しても気にしません。これは、コネクター固有の設定でTomcatで行うことができます。 (Tomcat 6 Connector documentation

または、JavaScriptのタイムスタンプのアプローチのいくつかの並べ替えを考え出すことができますが、私はクライアントのクロックを設定するとは思わない。 Webサーバーへの複数の呼び出しを行う必要があります。

  • あなたはまだいくつかのジッタ分散を持っているが、データ

とレイテンシをカバーするこのアプローチを報告してタイムスタンプクエリ

  • 本当の要求
  • ええと...面白い問題があります。 :)

  • 3

    クライアントからのリクエストをシミュレートするためにブラウザから測定する場合は、Firebugのネットタブを見て、ダウンロードする各ページとダウンロード注文の所要時間を確認します。

    3

    HttpServletResponseオブジェクトと、HttpServletResponseから返されたOutputStreamをラップすることができます。出力が書き込みを開始すると、startDateを設定することができ、停止したとき(またはフラッシュされたときなど)にstopDateを設定できます。

    これは、すべてのデータをクライアントに戻すのに要した時間を計算するために使用できます。

    私たちはアプリケーションでこれを使用しており、数値は妥当であると考えられます。

    編集:ServletFilterで開始日を設定して、クライアントが待機した時間を取得できます。クライアントに出力を書き込むまでに要した時間を教えてくれました。

    +1

    しかし、これはソケットのバッファやOPが言及するレイテンシを考慮していません:( –

    +0

    これは有望ですが、私はそれにショットをあげるでしょう。 –

    +0

    ちょうどこれを試して、それは動作しませんでした。彼らが物理的なマシンを離れるずっと前に書かれています。 –

    0

    彼らに総ページのより正確なビューを提供するためにネットフリックスが開発した、Jiffy-webをチェックアウト - >ページのレンダリング時間を

    0

    私は同じ問題を抱えていました。しかし、このJavaOne Paperは本当に私がこの問題を解決するのを助けました。私はそれを介して行くように要求し、それは基本的に時間を計算するためにJavaScriptを使用しています。

    関連する問題