2

ユーザーが新しいメッセージを持っているかどうかを確認するためにサーバーで長いポーリングを行うスクリプトがあるとします。サーバー側は次のようになります

while counter < 5
    if something_changed
        push_changes_to_client
        break
    else
        counter++
        sleep 5

データベースを5回チェックし、変更がない場合は毎回、次のチェックまで5秒間待機します。これにより、最大実行時間は約25秒になります。

クライアントがあるページから別のページに非常に速く移動するとどうなりますか?クライアントが別のページに移動した後もサーバースクリプトが実行され続け、そこで別の変更要求が送信されると思います。

これは、多くの人がサイト内をすばやく移動している場合(各ページでの最大実行回数が25秒未満)、サーバーは存在しないページに応答しようとしているすべてのスクリプトを実行し続ける必要があることを意味しますか?もう?これにより、サーバーはすべてのスレッドプールを非常に高速に使用しませんか?

4

1 に答える 1

4

同期スリープ呼び出しを使用する接続ごとのスレッドモデルでは、これは実際に多数のスレッドを拘束する可能性があります。ただし、「スリープ」が単にコールバックをスケジュールして戻る場合は、スレッドプールのlogjamを回避できます。

于 2009-09-14T19:09:23.507 に答える