6

Web サイトの訪問者を使用して情報を収集したいと考えています。
私が必要としているのは、各訪問者が 3 つの異なるホスト名に ping を実行し、次の情報を DB に保存することです。

Visitor IP, latency 1,latency 2, latency 3

もちろん、訪問者の邪魔をすることなく、すべてが訪問者に対して透過的でなければなりません。これは可能ですか?例を教えてください。jQuery用のプラグインなど、簡単にするためのプラグインはありますか

編集

これはこれまでのjsfiddle.net/dLVG6 ですが、データがランダムすぎます。50から190にジャンプします

4

3 に答える 3

7

これは、あなたが考えるかもしれないより多くの痛みになるでしょう.

最初の問題は、Javascript に ping がないことです。ほとんどの Javascript が得意とするのは、HTTP といくつかの類似プロトコルです。

2 つ目の問題は、いくつかの ajax リクエストを発行して結果の時間を計ることができないことです (これはあまりにも明白です)。同一生成元ポリシーにより、ajax を使用して、ページの送信元以外のサーバーと通信することができなくなります。JSONP を使用するか、イメージ タグの src を変更するか、その他のより間接的な方法を使用する必要があります。

3 つ目の問題は、大量のデータが返されるようなことはしたくないということです。データ転送時間や大規模なサーバー処理によってレイテンシの測定が妨げられることは望ましくありません。

第 4 に、キャッシュされている可能性のある URL を要求することはできません。オブジェクトがたまたまキャッシュにあった場合、「レイテンシ」の測定値は非常に低くなりますが、意味はありません。

src私の解決策は、属性のないイメージ タグを使用することでした。ドキュメントの読み込み時srcに、有効なサーバーを指すように設定しますが、無効なポートを使用します。一般に、適切な 404 エラー応答を生成するよりも、サーバーが単に接続を拒否する方が高速です。あとは、画像からエラー イベントを取得するのにかかる時間を測定するだけです。

フィルドルより:

var start = new Date().getTime();
$('#junkOne').attr('src', 'http://fate.holmes-cj.com:8886/').error(function () {
    var end = new Date().getTime();
    $('#timer').html("" + (end - start) + "ms");
});

技術が向上する可能性が高いです。ここにいくつかのアイデアがあります:

  1. DNS ホスト名の代わりに IP アドレスを使用します。
  2. 「ping」を複数回実行し、最高スコアと最低スコアを除外して、残りを平均します。
  3. Web ページの処理が非常に重い場合は、UI の負荷が最も軽いと思われるときにテストを実行してみてください。
于 2013-04-28T23:51:59.777 に答える
2

jQuery を使用すると、次のことができます: $.ajax(url,settings)( http://api.jquery.com/jQuery.ajax/beforeSend ) から、およびcomplete経由で時間を取り、Date.now()それらの時間を減算します -> リクエストの時間が得られます (正確には「Ping」ではありません)。けれど)

于 2013-04-28T19:11:00.490 に答える