2013-08-07 23 views
7

クライアントクロックとサーバークロックの違いを調べる方法を見つけました。クライアントデバイスのクロックとサーバークロックを正確に比較(ミリ秒単位)

これまで私は以下のアプローチを試みました。

収集:

  1. クライアント要求時間
  2. サーバー時間
  3. クライアントの応答時間

問題は、我々はクライアントに到達するために、サーバーと応答に到達するために、要求間の未知の遅延を得ることです。ここで

はJavaScriptとPHPを使用して、このスキームの実装です:

time.js

var request = new XMLHttpRequest(); 
request.onreadystatechange = readystatechangehandler; 
request.open("POST", "http://www.example.com/sync.php", true); 
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
request.send("original=" + (new Date).getTime()); 

function readystatechangehandler() { 
var returned = (new Date).getTime(); 
if (request.readyState === 4 && request.status === 200) { 
    var timestamp = request.responseText.split('|'); 
    var original = + timestamp[0]; 
    var receive = + timestamp[1]; 
    var transmit = + timestamp[2]; 
    var sending = receive - original; 
    var receiving = returned - transmit; 
    var roundtrip = sending + receiving; 
    var oneway = roundtrip/2; 
    var difference = sending - oneway; // this is what you want 
    // so the server time will be client time + difference 
} 
} 

Sync.php

<?php 
$receive = round(microtime(true) * 1000); 
echo $_POST["original"] . '|'; 
echo $receive . '|'; 
echo round(microtime(true) * 1000); 
?> 

でもこのアプローチでは、私は50から500ミリ秒のエラーを取得します。遅延が大きい場合、エラーはより多くなります。

しかし、「adtruth」という名前の会社が時計の時間に基づいてデバイスを区別できるとはどういうことかと思います。彼らはそれを「時差リンク」と呼びます。 デバイス認識の鍵AdTruth形式は、TDLと呼ばれる特許取得済みの技術です。何十億もの接続デバイスが同じ構成で数千もあるかもしれませんが、少なくとも2つのデバイスが同じ時間に設定されているわけではありません - 少なくとも、ミリ秒に減らしたときではありません。 41番目のパラメータとAdTruthの創設者Ori Eisenは、「これらの異なるタイムスタンプをサーバのマスタークロックと比較します。疑問がある場合、TDLはタイブレーカーです」と述べています。ここで

http://www.admonsters.com/blog/adtruth-joins-w3c-qa-ori-eisen-founder-and-chief-innovation-officer

はそれは、彼らは単に彼らの説明ではネットワーク遅延の問題を無視することのように見える彼らの「時間差のリンク」特許

http://www.google.com/patents/US7853533

答えて

0

へのリンクです。一致【時間のデルタ]パラメータが選択範囲(...)

内に収まる決意に基づい

(...):私は、彼らの(曖昧)フレーズに気付きます

これは、ネットワークの遅延の変動を説明します。

インターネットなどの大規模で忙しいネットワークでは、精度を「ミリ秒以下」にすることはできません。他のネットワークタイプ(私は、トークンリングや非常にネットワークがと非常に忠実なQoSポリシーと考えています)は、このレベルの精度を可能にします。

1
var oneway = roundtrip/2; 

なぜネットワークが対称であるとしますか?実際にはかなり合理的な仮定です。スループットとレイテンシを見積もるためにデータを両方向に送信することで接続を調整しようとすることができます(サーバクライアント測定の例についてはboomerang's bw moduleを参照してください)。TCPの基本機能は輻輳ウィンドウは順応的に適応します。したがって、静的接続であっても、接続の初期段階(クライアントデバイスのIDを取得しようとする可能性が高いポイント)でスループットが著しく変化します。

ヘッダーを含めて応答が1kb未満であることを確認してください(1つのパケットに収まることを確認してください)。 GETリクエストはPOSTよりもわずかに小さくなりますが、Webソケットを使用するとより正確な数字が得られます。より現実的なアプローチは、既知の間隔でいくつかのサンプルを捕捉し、平均を計算することである。実際には非常にシンプル

estmatedRtt=300; 
for (var x=0; x<10; x++) { 
    setTimeout(estimatedRtt * x * 1.3, captureOffset); 
} 
1

その、最初のクライアントが一定の時間を計算してい - 2005年01月31日、18:34:20.050(ミリ秒単位)。次に、クライアントマシン上の時刻(現在時刻)を計算し、現在時刻と固定時刻の間の差分を計算します。クライアントの時刻とデルタをサーバーに送り返します。サーバー上で、同じ固定時間から、同じデルタを追加すると、サーバーの現在の時刻(応答時間の遅れなどのために現在はなくなった時刻)は何になりますか。クライアントの現在の時刻とサーバーの現在の時刻との違いは、クライアントとサーバーの時間差を示します。

+0

私はその時点でこの答えを完全に無視しました。本当にそれは多くの意味があります。 +1 –

関連する問題