2016-05-29 6 views
0

私は複数のGET要求を使用して5000人以上のユーザーの場所を取得する必要があるシステムを開発しています。残念ながら、APIエンドポイントは複数のクライアントIDをサポートしていません。すなわち、私は5000以上のユニークな取得リクエストを作成して、そのロケーションを取得し、累積レスポンスを使用して別のAPIコールを作成する必要があります。タイムアウトなしで複数のカール要求を行う。

私はリクエストを行うためにCURLを使用しています。私は次のスニペット[1]を使ってリクエストを行いました。

少数のリクエストに対しては完璧に機能しますが、1000を超えるとタイムアウトになると、タイムアウトになります。

$data = []; 

    for ($i = 0; $i < 1000; $i++) { 
     $data[] = 'https://foo.bar/api/loc/v/queries/location?address=XXXXXXXXX'; 

    } 
    $token = $this->refresh(); 

    $r = $this->multiRequest($data, $token); 

この問題を解決するにはどうすればよいでしょうか?

  • a。 PHPスクリプトのmaximum_execution_timeを増やすか、
  • b。マルチスレッドまたは
  • のようなものを使用してください。その他
+0

は、それはリクエストのボトルネックの影響を受けやすく、それはシステムが不安定になることができます。私は良い解決策はキュー(例:RabbitMQ)+ javaプロセス(またはnodejs)PHPをサポートする複数の要求を行うと思います。このプロセスの要求、マルチスレッド、メモリの制御を制限することができます。ウェブ用のPHPでタスクを分離することは、円滑な操作のままです。 – Vuong

答えて

0

複数のIDを処理できるようにエンドポイントAPIを変更する方法はありますか?はいの場合は、これが優先されます。これは、同時に数千件のリクエストを実行すると、実際にはDDoS攻撃のようなものになるからです。

ただし、PHPのcurl_multi_ *関数(http://us3.php.net/manual/en/function.curl-multi-exec.php)をチェックしたい場合があります。役立つことができ

別のリンク:あなたはPHPでスレッドを使用するときにそれは完璧ではないhttp://www.onlineaspect.com/2009/01/26/how-to-use-curl_multi-without-blocking/

+0

APIエンドポイントを変更することはできません(私のコントロールではありません)。私は実際にコード内でcurl_multi_ *関数を使用しています。 – Fawzan

+0

ユーザーの場所の変更イベントをキャッチし、場所が変更されたときに動的に更新する方法はありますか? – Vagharsh

+0

よく、いいえ。もし私がそれをしたいのであれば、もう一度投票したい。 – Fawzan

関連する問題