2017-08-03 6 views
-1

リクエストの1つがステータスコード429を受信すると、マルチカール要求を強制停止または停止できますか?PHPが進行中のマルチカール要求を抹消する

私はAPIからデータを取得し、レート制限を超えないようにする必要があるため、これに対する解決策を見つけることを試みてきました。

これらのリクエストは非同期なので、私はこれをどうやって行うのかは確信しています。

答えて

1

よく、CURLOPT_PROGRESSFUNCTIONで自由に取り消すことができます。転送をキャンセルするかどうかを指定するグローバル変数、それをインポートする関数(global $varの構文)を使用し、キャンセルする時間、例えば$abort=false;ecurl_setopt($ch,CURLOPT_PROGRESSFUNCTION,function($a,$b,$c,$d,$e){global $abort;return (int)!$abort;}); - 次に$ abort = trueにしてください。いつそれらを中断する。それはあなたがその速度のレート制限は、あなたが

編集を超えている場合、転送速度を制限するためにCURLOPT_MAX_RECV_SPEED_LARGEを使用することができ、言った:あなたもCURLOPT_PROGRESSFUNCTIONがまったく呼び出されるためfalseにCURLOPT_NOPROGRESSを設定する必要があることに注意してください。

+0

ありがとうございます。ほとんどのリクエストは停止しているようですが、すべてではないと思います。 abort変数を使用する代わりに、私はmemcacheを使って変数を格納し、それをチェックします。うまくいけば、あまりにも多くの429の応答が得られなくなり、非同期要求のレートリミッタを実装するのが少し難しくなります。 – user2909323

関連する問題