我正在找到一种方法来获取客户端时钟和服务器时钟之间的差异。比较客户端设备时钟和服务器时钟精确到毫秒
直到现在我已经尝试了以下方法。
搜罗:
- 客户端请求时
- 服务器时间
- 客户端响应时间
的问题是,我们得到的请求间的未知延迟到达服务器响应到达客户端。
下面是使用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,用于时差连接。在数十亿台连接的设备中,可能会有数千台配置相同的设备,但没有两台设备的时钟设置为同一时间 - 至少,不会将时间设置为毫秒。 012r41st Parameter和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
那时我完全忽略了这个答案。真的很有意义。为你+1 –