내가 사용하고있는 API에 속도 제한을 치고 있습니다.이를 방지하기 위해 사용했던 방법이 확실히 작동해야하기 때문에 혼란 스럽 습니다만, 시간의 100 % 작동하지 않습니다. 내 API를 호출하기 전에이 라인을 가지고 있습니다.이 함수는 내 한계에 가까운지를 확인하는 함수를 호출하기로되어 있고, 그렇다면 내 히트 카운트를 재설정 할 수있을 정도로 오래 잠을 자면됩니다. 이처럼 : 여기 sleep rate()을 사용하여 공격 속도 제한이 작동하지 않음
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가 잘못 제한되어 있어야합니다.
이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에 대한 개발 키를 사용하고 있습니다.이 키는 테스트 용도로만 사용되기 때문에 심하게 제한됩니다. 그들은 일주일 정도 더 나은 키를위한 응용 프로그램을 수락하지 않지만 그때까지 가지고있는 것들로 작업하고 있습니다. –