我有一个javascript项目,目前部署在AmazonS3存储桶中。在页面上,有一个时钟,我想同步到时间服务器,以提供更高的准确性。我目前有代码,可以尝试连接,但不确定如何正确同步到时间服务器:
try {
//FF, Opera, Safari, Chrome
var xmlHttp = new XMLHttpRequest();
xmlhttp.open("GET", "169.254.169.12", false);
xmlhttp.send();
var dateStr = xmlhttp.getResponseHeader('Date');
var serverTimeMillisGMT = Date.parse(new Date(Date.parse(dateStr)).toUTCString());
var localMillisUTC = Date.parse(new Date().toUTCString());
return serverTimeMillisGMT - localMillisUTC;
}
catch (err1) {
//IE
try {
var xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
xmlhttp.open("GET", "169.254.169.12", false);
xmlhttp.send();
var dateStr = xmlhttp.getResponseHeader('Date');
var serverTimeMillisGMT = Date.parse(new Date(Date.parse(dateStr)).toUTCString());
var localMillisUTC = Date.parse(new Date().toUTCString());
document.getElementById("serverTime").innerHTML = "This clock is synced to a time server.";
return serverTimeMillisGMT - localMillisUTC;
}
catch (err2) {
try {
xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open("GET", "169.254.169.12", false);
xmlhttp.send();
var dateStr = xmlhttp.getResponseHeader('Date');
var serverTimeMillisGMT = Date.parse(new Date(Date.parse(dateStr)).toUTCString());
var localMillisUTC = Date.parse(new Date().toUTCString());
document.getElementById("serverTime").innerHTML = "This clock is synced to a time server.";
return serverTimeMillisGMT - localMillisUTC;
}
catch (err3) {
//use CPU time.
console.log("using machine time...");
document.getElementById("machineTime").innerHTML = "This clock is synced to machine time.";
return 0;
}
}
我现在有时间服务器的IP地址(https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-set-time.html#windows-配置ntp(,但这不起作用。
关于如何与亚马逊时间服务器同步的想法?
谢谢!
如果JavaScript在AmazonS3上运行,那么它将作为前端应用程序(取消服务器端NodeJS的链接(。
如果你正在寻找一个纯粹的前端解决方案来解决你的问题,那么如果不能调用后端,你将被限制在用户本地机器的系统时间内。
如果你想使用亚马逊服务器同步,你需要使用后端应用程序,它可以从运行它的服务器而不是用户机器上获得时间。
这可以通过设置API网关和Lambda组合来实现,但您需要注意,用户机器连接到API然后接收响应的往返行程仍会延迟。