我想我很好地理解了投票的概念。您基本上只是从服务器请求数据,但只有在数据更改后,服务器才会返回它。直截了当的东西。我的问题来自这个例子。
假设我的拍卖数据不断变化。这些数据中包括
- 拍卖结束时间
- 拍卖中的当前投标人数量
当我开始长民意调查时,我基本上有这样的事情:
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 个请求?
有任何想法吗?