トラフィックの多いWebサイトでの長いポーリングの問題
-
07-07-2019 - |
質問
ユーザーが新しいメッセージを持っているかどうかを確認するためにサーバーで長時間ポーリングを行うスクリプトがあるとします。サーバー側はこのようなものになります
while counter < 5
if something_changed
push_changes_to_client
break
else
counter++
sleep 5
データベースを5回チェックし、変更がない場合は毎回、次のチェックまで5秒待機します。これにより、最大実行時間は約25秒になります。
クライアントがあるページから別のページに非常に速く移動するとどうなりますか?クライアントが別のページに移動した後でも、サーバースクリプトは実行を続け、そこで別の変更要求が送信されると考えられます。
これは、多くの人がサイト内をすばやく移動している場合(各ページで最大25秒未満の実行)、サーバーはすべてのスクリプトを実行し続ける必要があることを意味します。もう存在しませんか?これにより、サーバーはすべてのスレッドプールを非常に高速に使用しませんか?
解決
同期スリープ呼び出しを使用した接続ごとのスレッドモデルでは、これは実際に多数のスレッドを拘束する可能性があります。ただし、「スリープ」がコールバックをスケジュールして戻り、スレッドプールのログジャムを回避できます。
所属していません StackOverflow