在进行长期民意调查时,您是否将旧数据发回?

时间:2013-02-16 17:26:01

标签: php long-polling

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

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

之类的内容
  • 拍卖截止时间
  • 拍卖的现有投标人数

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

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个请求?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我会在内存中缓存所有ajax响应数据以及每次拍卖有任何更改的最后日期,因此您不必比较旧数据和新数据,只需比较日期时间。在拍卖的某些变更(已结算,新出价等)上使缓存无效。

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

此模型应该保护数据库不会过载。