2011-12-21 11 views
1

Blekko API(ウェブ検索API)を使用するWebアプリケーションを構築しています。 アプリケーションはマルチユーザーです。1秒あたりのAPI呼び出しをスケジュールする

APIへの呼び出しを1 [コール/秒]に制限する必要があります。 この制限は、すべてのユーザーによるすべてのアクティビティに適用する必要があります。つまり、APIを使用するためのスケジュールが必要です。

どうすればよいですか?

+0

のスクリプトを一時停止する1つのワーカー – zerkms

+0

によってキューやプロセス、それにすべてのクエリを入れて、あなたは、API呼び出しをブロックしますか1秒より速く発行するか、1秒に1回実行するようにキューに入れますか? – VNO

+0

私はそれらを1秒間に1回実行するようにキューに入れたいと思います。 –

答えて

2

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); 
} 

これは「忙しい」ループのビットですが、それはあなたが秒ごとに複数の要求を実行していないとも保証しないことを保証しますキューに入れられた要求が処理するのに時間がかかりすぎないようにします。

注:このメソッドでは、set_time_limit()呼び出しに関係なく、サーバーがプロセス自体を強制終了しないようにする必要があります。長時間実行されているプロセスは、しばしば共有サーバー上で終了します。これを行うには

0

簡単な方法は、usleep()

usleep(1000000);を使用することで1.0秒

関連する問題