如何将 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 的用户机器的往返仍然会有延迟然后收到回复。