ポーリングの概念はかなりよく理解していると思います。基本的にはサーバーにデータを要求するだけですが、データが変更された場合にのみ、サーバーはデータを返します。簡単なもの。私の問題はこの例にあります。
絶えず変化するデータを使ったオークションがあるとしましょう。このデータの中には次のようなものがあります
- オークション終了時間
- オークションに参加している現在の入札者の数
私が長い投票を始めるとき、私は基本的に次のようなものを持っています:
while($counter < $MESSAGE_TIMEOUT_SECONDS) {
$newData = getNewData();
$hasDataChanged = hasDataChanged($newData, $oldData);
if ( $hasDataChanged ) {
return $newData;
}
usleep($MESSAGE_POLL_MICROSECONDS);
}
古いデータはどこから入手できますか?つまり、リクエストを実行するときに、最後に与えられた現在の状態を投稿するか、セッションにデータを保存することができます。長いポーリングを実行するときにセッションにデータを保存することは許可されていますか、それともそのページの現在の状態でJavascriptからPOSTを実行する必要がありますか?
また、50ページを開いている人がデータベースを強制終了するのを防ぐにはどうすればよいですか?つまり、getNewData()は効果的にデータベースにアクセスします。ポーリング間隔が約0.5秒の場合、これは0.5秒ごとに50リクエストを意味する可能性があります。つまり、50個のタブを開くことにした場合、1人のユーザーが30秒でデータベースに50 x 2 x 30=3000リクエストを送信することを意味します。
何か案は?