0

我想我很好地理解了投票的概念。您基本上只是从服务器请求数据,但只有在数据更改后,服务器才会返回它。直截了当的东西。我的问题来自这个例子。

假设我的拍卖数据不断变化。这些数据中包括

  • 拍卖结束时间
  • 拍卖中的当前投标人数量

当我开始长民意调查时,我基本上有这样的事情:

while($counter < $MESSAGE_TIMEOUT_SECONDS) {
  $newData = getNewData();
  $hasDataChanged = hasDataChanged($newData, $oldData);
  if (  $hasDataChanged  ) {
     return $newData;
  }

  usleep($MESSAGE_POLL_MICROSECONDS);

}

我从哪里获取旧数据?我的意思是,在发出请求时,我可以发布上次给我的当前状态,或者我可以将数据存储在 Session 中。在进行长轮询时,我是否可以在会话中存储内容,或者我应该使用该页面的当前状态从 Javascript 进行 POST?

另外,我将如何阻止打开 50 页的人杀死数据库?我的意思是,getNewData() 有效地进入了数据库。如果轮询间隔约为半秒,这可能意味着每半秒有 50 个请求,如果他决定打开 50 个选项卡,这可能意味着仅一个用户在 30 秒内向数据库发出 50 x 2 x 30 = 3000 个请求?

有任何想法吗?

4

1 回答 1

0

我会将所有 ajax 响应数据以及每次拍卖有任何更改的最后日期缓存在内存中,这样您就不必比较新旧数据,而只需比较日期时间。对拍卖的某些更改(已关闭、新出价等)使缓存无效。

然后从客户端从最后一个已知数据(最后一个 ajax 调用或用户打开页面时)发送时间并比较日期以查看是否有更改,如果它不只是返回 status:nochange(现在客户端知道没有什么要更新)如果它确实从缓存和更新用户页面返回所有必要的数据。

该模型应保护数据库免于过载。

于 2013-02-16T17:47:52.317 回答