0

我正在使用 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 秒检索一次服务器时间,然后更新“计数”。这是一个好的解决方案吗?还是有其他选择?

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

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

4

1 回答 1

1

App Engine 服务器上的系统时钟保持同步:请参阅此权威答案

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

于 2013-04-24T06:10:22.250 回答