Google应用引擎:同步所有服务器'时间和客户'javascript计时器
Google app engine: sync all servers' time and clients' javascript timers
我正在开发谷歌应用程序引擎与Python投标系统。产品在预定时间开启竞价,竞价时间为3分钟。在3分钟的时间内,产品的价格每秒钟下降一个常数,直到为零。谁先按"投标"键,谁即中标。这个应用程序中的一个关键问题是,所有用户之间的时间应该完全同步,以便每个人在同一时间看到相同的价格。以下是我到目前为止所得到的,但它受到计时器不准确的影响。
当用户访问或刷新页面时,Python代码将服务器时间传递给javascript计时器,计时器开始倒计时。简化后的javascript代码如下:
var count = {{timeToBid}}; // 'timeToBid' is in seconds and is inserted by the template engine
var price =={{initialPrice}} // The initial product price
var currentPrice; // Current price
function updateTime() {
timeStr = ...; // Set the time string to be HH:MM:SS
$("#timeToBid").html(timeStr); // Display time in the 'timeToBid' div
if (count <= 180) { // Start bidding
currentPrice = ...; // Calculate the current price
$("#currentPrice").html(currentPrice); // Update current price
}
count--;
setTimeout(updateTime, 1000); // Executed every second
}
updateTime();
上面的javascript受到用户浏览器之间不同步计时器以及服务器时间不同步的严重影响(参见此)。每个浏览器中显示的当前价格可能相差很大,这使得系统完全无法使用。这是一个相当复杂的问题,我要求有好的解决办法。一到两秒的时间误差是可以接受的。我的问题:
(a)为了使javascript计时器更准确,我计划使用AJAX每10秒检索服务器时间,然后更新'count'。这是一个好的解决方案吗?还是有其他选择?
$.ajax({
url: "/getServerTime",
cache: false,
success: function(serverCount) {
count = parseInt(serverCount);
return false;
}
});
(b)我完全不知道如何解决服务器时间不一致的问题。有人能帮忙吗?谢谢。
App Engine服务器上的系统时钟保持同步:参见此权威答案。
每个应用引擎HTTP响应都有一个Date
标头,就像这个Date: Wed, 24 Apr 2013 06:03:37 GMT
。您可以使用它来同步浏览器和服务器时间。
相关文章:
- 使用JavaScript将客户端日期/时间字符串转换为JSON日期/时间串
- Javascript 倒数计时器 - 客户端时间与 mySQL 时间
- 使用 JavaScript 的客户端日期/时间戳一致(考虑时区)
- 同步客户端和服务器端时间
- JavaScript编辑本地客户端时间
- javascript客户端时间到php服务器时间
- 显示客户端时间,而不是 javascript 中的服务器时间
- 将 JavaScript 的客户端时间获取到 PHP 中
- 如何使用客户端时区将数据库时间戳输出为客户端中的日期戳
- 客户表单提交日期时间,MVC应用程序
- 引导日期选择器占用客户端PC时间,如何从服务器设置默认时间
- 服务器时间而不是客户端时间 JAVASCRIPT
- 客户端和服务器时间之间的差异
- 服务器和客户端时区上的日期时间差异
- 如何使这个javascript函数实际收集服务器时间和倒计时,直到事件开始而不是浏览器/客户端时间
- FlipClock - 使用服务器时间而不是客户端时间
- 想要显示服务器 UTC 日期时间,而不考虑客户端计算机的日期时间
- 比较客户端和服务器时间
- 在浏览器上显示服务器时间而不是客户端时间
- 正在测量服务器响应时间(客户端)