我想我很瞭解投票的概念。您基本上只是從服務器請求數據,但只有數據發生更改後,服務器纔會返回數據。直接的東西。我的問題伴隨着這個例子。做長期民意調查時,你會發布舊數據嗎?
比方說,我拍賣的數據不斷變化。在這個數據就像
- 事情關閉拍賣的時間
- 當前投標人的數量在拍賣
當我開始長輪詢,我基本上是這樣的:
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