-3

このリンクをチェックしてください http://tinyurl.com/l96z2m2

javascript を使用してクライアント デバイスの時間を取得し、php を使用してサーバー時間を取得します。delay はネットワークの往復時間、つまり、送信された要求と受信された応答の間の時間です。

同じ時点で両方の時間を比較したい。ネットワーク遅延を無視する必要があります。

「クライアントで送信された要求」と「サーバーで受信された要求」の間の時間、または「サーバーで受信された要求」と「クライアントで受信された応答」の間の時間のいずれかを計算することで可能になるはずです。

index.html

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" ></script>
<script>
var b = new Date();
$.getJSON("http://localhost/json.php?callback=?", function(data){
var a = new Date();
document.write("|Client-"+a.getUTCHours()+":"+a.getUTCMinutes()+":"+a.getUTCSeconds()+":"+a.getUTCMilliseconds()+"|    Server-"+data.time);
  var c = a - b;
document.write("|delay-"+c);
});
</script>

json.php

<?php
$callback = $_GET["callback"];

function udate($format, $utimestamp = null) {
if (is_null($utimestamp))
$utimestamp = microtime(true);

$timestamp = floor($utimestamp);
$milliseconds = round(($utimestamp - $timestamp) * 1000000);

return date(preg_replace('`(?<!\\\\)u`', $milliseconds, $format), $timestamp);
}

 $t =  udate('H:i:s:u');

 echo $callback . "({
 \"time\":\"$t\"

 })";
 ?>
4

2 に答える 2

2

HTTP で NTP をやり直しているようです。NTP プロトコルの仕組みはhttp://en.wikipedia.org/wiki/Network_Time_Protocolで確認できます。

つまり、サーバーとクライアント間の往復時間を簡単に測定できます。また、NTP は、2 つのトリップ (クライアント -> サーバー、およびサーバー -> クライアント) の間の時間が対称であると仮定しました。

このクロック スキューの計算を 3 回以上実行し、より適切な測定のために最小限に抑えることをお勧めします。

また、RTT には OS/HTTP スタックで費やされた時間が含まれるため、最終的な数値は NTP プロトコルほど正確ではない可能性があることに注意してください。

于 2013-07-18T06:22:50.073 に答える
0

サーバー時間とクライアント時間を取り、その差を計算してネットワーク遅延を取得するほど単純ではないことを認識することが重要です...

クライアントの UTC 時間とサーバーの UTC 時間を取る場合、クライアントが時間を変更して無効にすることができるため、ネットワーク遅延が 2 つの間の差であるという保証はありません。

しかし、それが遅延であると仮定すると、次のようになります。

JavaScript:

var d = Date.UTC();

指定された日付から 1970 年 1 月 1 日午前 0 時までのミリ秒数を返します

PHP:

<?php
    //Get miliseconds since 1970
    $time = time() * 1000;
    echo $time;
?>

PHP では、time() を呼び出すだけで、1970 年 1 月 1 日 00:00:00 GMT からの経過時間を秒単位で取得できます。ミリ秒が必要な場合は、(time()*1000) を実行します。

上記で PHP RESTful サービスを作成し、JavaScript で ajax を使用してサービスを呼び出すか、PHP 部分を実行してから JavaScript で 2 つを比較します。次のようにします。

<script type="text/javascript">
    var serverTime = "<?php Print(time() * 1000); ?>";
    var clientTime = Date.UTC();
    var delay = clientTime - serverTime;
</script>
于 2013-07-18T06:16:16.420 に答える