我想我很了解投票的概念。您基本上只是从服务器请求数据,但只有数据发生更改后,服务器才会返回数据。直接的东西。我的问题伴随着这个例子。做长期民意调查时,你会发布旧数据吗?
比方说,我拍卖的数据不断变化。在这个数据就像
- 事情关闭拍卖的时间
- 当前投标人的数量在拍卖
当我开始长轮询,我基本上是这样的:
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个请求?
任何想法?
那么你会如何阻止一个人打开10个窗口,并有效地启动长期民意调查10次?还是20倍?当然,你必须跟踪他访问数据库的频率如何? – coderama 2013-02-16 18:05:46
如果将数据缓存在内存中,它根本不会影响数据库。 – 2013-02-16 18:12:14