Google应用引擎:同步所有服务器的时间和客户端的javascript计时器

时间:2013-04-24 05:30:52

标签: javascript google-app-engine

我正在使用Python在Google App Engine上开发出价系统。产品在预定义的时间开放以进行投标,并且投标持续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受到用户浏览器中未同步的计时器以及未同步的服务器时间的影响(请参阅this)。每个浏览器中显示的当前价格可能在很大的范围内变化,这使得系统完全无法使用。这是一个相当复杂的问题,我要求提供良好的解决方案。一到两秒的时间不准确是可以接受的。我的问题:

(a)为了使javascript计时器更准确,我计划使用AJAX每10秒检索一次服务器时间,然后更新'count'。这是一个好的解决方案吗?还是有其他选择?

$.ajax({
   url: "/getServerTime",
   cache: false,
   success: function(serverCount) {
     count = parseInt(serverCount);
     return false;
   }
});

(b)我完全不知道如何解决服务器时间不一致问题。有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:1)

App Engine服务器上的系统时钟保持同步:请参阅this authoritative answer

每个App Engine HTTP响应都有Date标头,如此Date: Wed, 24 Apr 2013 06:03:37 GMT。您可以使用它来同步浏览器和服务器时间。