私は使用しているAPIにレート制限を適用していますが、これを防ぐために使用した方法が間違いなく機能するはずなので、混乱しています。時間の100%は働かない。私は私の限界に近づいているかどうかを確認する関数を呼び出すはずのすべてのAPI呼び出しの前にこの行を持っています。このように:ここで sleep()を使用して速度制限が動作しないようにする
if (isset($http_response_header)) {rateLimit($http_response_header);}
file_get_contents($endpointURL);
は機能だ:私が毎秒コールの最大数を作った場合は1秒に寝て、私が作った場合は2分をスリープ状態になっています
function rateLimit($header)
{
// get hit count from $header
// $count[0] is how many hits per second
// I have a limit of 20 per second
// $count[1] is how many hits per 2 minutes
// I have a limit of 100 per 2 minutes
if ($count[0] == 19) {sleep(1); return;}
if ($count[1] == 99) {sleep(120); return;}
}
2分あたりの最大通話数。私のコードに何か問題がありますか、あるいは間違ってAPIを使って私を制限していなければなりませんか?ここで
誰かが、私はそれを解析した方法を知りたいと思っているので、全体rateLimit
関数である。
function rateLimit($header)
{
$pos1 = strpos($header[7], ' ') + 1;
$pos2 = strpos($header[7], ':', $pos1);
$count[0] = substr($header[7], $pos1, ($pos2 - $pos1));
$pos1 = strpos($header[7], ',') + 1;
$pos2 = strpos($header[7], ':', $pos1);
$count[1] = substr($header[7], $pos1, ($pos2 - $pos1));
if ($count[0] == 18) {sleep(1); return;}
if ($count[1] == 98) {sleep(120); return;}
}
RTM:[http_response_header](http://php.net/manual/en/reserved.variables.httpresponseheader.php)はintの配列を返しません。あなたの解析方法を示してください。また、スリープするのは良い考えではなく、代わりにfalseを返し、rateLimit関数を条件のチェックとして使用します。 –
あなたは頻繁にAPIをヒットする必要がありますか?最大20ヒット/秒の音が酷いです。それはちょうど私に "キャッシング"を叫びますが、あなたはいくつかのライブアップデートをしています。 – JimL
@Lawrence Cherone私はどのように解析したかを示す関数全体を使って質問を更新しました。どれくらい時間がかかっても、私は仕事を呼び出す必要があるので、私は睡眠を使ってスキップする代わりにAPI呼び出しを延期しています。あなたの名前の前に@をタイプすると、それはなぜ機能しませんか?私はRiot Games(League of Legends)APIの開発キーを使用していますが、これはテスト目的にすぎないため厳しく制限されています。彼らは一週間ほどの間、より良い鍵のアプリケーションを受け入れませんが、私はそれまでに持っていたものと一緒に働いています。 –