gpt4 book ai didi

javascript - 使用服务器时间在 Meteor 中创建计时器

转载 作者:行者123 更新时间:2023-11-29 22:00:39 25 4
gpt4 key购买 nike

我正在尝试使用 meteor 中的服务器时间创建一个计时器。在客户端,在 Meteor.startup 函数内,我调用服务器以获取服务器时间并将其保存在 session 变量中。之后,将使用 Meteor.setInterval 函数每 15 分钟调用一次服务器。

在服务器 main.js 上,

return Meteor.methods({

getServerTime: function () {
var d = new Date().getTime();
return d;
}

});

在客户端 main.js ,

Meteor.startup(function() {

Session.set('serverTime', false);
// get serverTime on startup
Meteor.setServerTime();
// update serverTime every 15min
Meteor.setInterval(function() { Meteor.setServerTime(); }, 900000);


});

Meteor.setServerTime = function() {
//get server time (it's in milliseconds)
Meteor.call("getServerTime", function (error, serverTime) {

Session.set('serverTime', serverTime);

});
};

在客户端计时器模板代码中,我从 session 中获取服务器时间,Session.get('serverTime');,用于计时器代码。问题是,如果我在两个不同的浏览器上使用计时器并刷新其中一个,则该浏览器上的计时器会更改,而不会影响另一个浏览器上的计时器,因为服务器时间保持在 session 中。

我正在寻找一种方法,以便无论用户在他/她的浏览器上做什么,计时器都不会受到影响,并且使用服务器时间的每个浏览器都应该始终相同。

是否有任何其他方法/想法来解决这种情况并使计时器在任何地方都保持一致?

提前致谢。

最佳答案

您通过 Meteor.setServerTime() 得到的是调用时服务器的时间。

很明显,当您有 2 个浏览器在不同时间获取服务器时间时,它们将获得不同的 session 值。

如果你想让连接到服务器的所有客户端大约能够告诉服务器时间,你需要解决现在时间和你得到服务器时间的时间之间的时间偏移.

我觉得我没解释好,挺不清楚的。所以让我们通过代码来展示它。

Meteor.call("getServerTime", function (error, serverTime) {
Session.set('serverTime', serverTime);
Session.set('timeObtained', Date.now()); //local time when you got the serverTime
});

然后,您将使用该值来求解 serverTime NOW。

function realServerTime(){
return Session.get('serverTime') + (Date.now() - Session.get('timeObtained'));
}

Date.now() - Session.get('timeObtained')现在时间与您获取服务器时间的时间差

现在这会受到几毫秒(或更多,取决于连接)的错误的影响,为了减少这种情况,您必须使用延迟近似方法,我不会在这篇文章中介绍它。

但如果您在本地环境中,差异很可能不会超过 10 毫秒。

关于javascript - 使用服务器时间在 Meteor 中创建计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23947256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com