如何将 Amazon S3 存储桶中的 javascript 连接到 Amazon 时间服务器?
How to connect javascript in Amazon S3 bucket to Amazon time server?
我有一个 javascript 项目当前部署在 Amazon S3 存储桶中。在页面上,有一个时钟,我想将其同步到时间服务器以提供更高的准确性。我目前有代码,可以尝试连接,但不确定如何正确同步到时间服务器:
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-configuring-ntp),但这不起作用。
关于如何与亚马逊时间服务器同步的想法?
谢谢!
如果 JavaScript 在 Amazon S3 上是 运行 那么这将被用作前端应用程序(取消链接服务器端的 NodeJS)。
如果您正在寻找针对您的问题的纯前端解决方案,则无法调用后端,您将受限于用户本地计算机的系统时间。
如果您想使用 Amazon 的服务器进行同步,则需要使用后端应用程序,该应用程序可以从服务器 运行 而不是用户机器上获取时间。
最简单的方法是设置一个 API Gateway and Lambda 组合,但您需要注意,连接到 API 的用户机器的往返仍然会有延迟然后收到回复。
我有一个 javascript 项目当前部署在 Amazon S3 存储桶中。在页面上,有一个时钟,我想将其同步到时间服务器以提供更高的准确性。我目前有代码,可以尝试连接,但不确定如何正确同步到时间服务器:
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-configuring-ntp),但这不起作用。
关于如何与亚马逊时间服务器同步的想法?
谢谢!
如果 JavaScript 在 Amazon S3 上是 运行 那么这将被用作前端应用程序(取消链接服务器端的 NodeJS)。
如果您正在寻找针对您的问题的纯前端解决方案,则无法调用后端,您将受限于用户本地计算机的系统时间。
如果您想使用 Amazon 的服务器进行同步,则需要使用后端应用程序,该应用程序可以从服务器 运行 而不是用户机器上获取时间。
最简单的方法是设置一个 API Gateway and Lambda 组合,但您需要注意,连接到 API 的用户机器的往返仍然会有延迟然后收到回复。