Blekko API ( web search API ) を使用する Web アプリを構築しています。アプリケーションはマルチユーザーです。
API への呼び出しを 1 [呼び出し/秒] に制限する必要があります。この制限は、すべてのユーザーによるすべてのアクティビティに適用する必要があります。つまり、API を使用するためのスケジュールが必要です。
それを行う方法についていくつかの提案が必要ですか?
Blekko API ( web search API ) を使用する Web アプリを構築しています。アプリケーションはマルチユーザーです。
API への呼び出しを 1 [呼び出し/秒] に制限する必要があります。この制限は、すべてのユーザーによるすべてのアクティビティに適用する必要があります。つまり、API を使用するためのスケジュールが必要です。
それを行う方法についていくつかの提案が必要ですか?
キューイングについて話しているので、API 呼び出しへの応答性はあまり重要ではないようです。その場合は、API 要求 URL をデータベース テーブルにダンプします。次に、バックグラウンド ワーカー プロセスを使用して、次のようなことを行います。
set_time_limit(0);
$api_requests = array();
while (TRUE)
{
if (count($api_requests) == 0)
{
// get multiple records from DB to limit requests and add
// to the $api_requests array.
// if DB returns no results, maybe sleep a few extra seconds
// to avoid "slamming" the database.
}
// get the next API request from the array
$request = array_shift($api_requests);
// send API request to Blekko
// process API results
// sleep 1 sec
sleep(1);
}
これは少し「ビジー」なループですが、1 秒間に複数のリクエストを実行しないようにし、キューに入れられたリクエストが処理されるまで長時間待機しないことを保証します。
注:この方法では、set_time_limit() 呼び出しに関係なく、サーバーがプロセス自体を強制終了しないことが必要です。共有サーバーでは、実行時間の長いプロセスが強制終了されることがよくあります。
これを行う簡単な方法は、usleep()
usleep(1000000);
スクリプトを 1.0 秒間一時停止します