시간이 지정된 크롤러 작업을 개발할 때 요청 빈도를 제어하는 것이 중요한 작업입니다. 과도한 요청 주파수로 인해 대상 서버가 IP를 차단하게 만들 수 있으며 과도하게 낮은 주파수는 데이터 크롤링 효율에 영향을 줄 수 있습니다. PHP에서 Time_nanosleep은 크롤러 간격 시간을보다 정확하게 제어하는 데 도움이되는 매우 실용적인 기능입니다.
PHP는 Sleep () 및 Usleep () 와 같은 여러 지연 기능을 제공합니다. 수면 () 지연 초 ()는 몇 초 동안 지연되며 정확도가 낮고 일부 비 절정 시나리오에 적합합니다. USLEEP ()는 마이크로 초 수준 (1 백만 분의 1 초)을 지원하지만 시스템 스케줄링에 쉽게 영향을 받고 고주파로 요청할 때 편향됩니다. Time_nanosleep은 더 강력한 정확성과 유연성으로 나노초 제어를 지원합니다.
bool time_nanosleep ( int $seconds , int $nanoseconds )
이 기능은 두 번째 매개 변수의 두 가지 매개 변수를 사용하여 개발자가 지연을 제어하는 데 1 초를 정확하게 도달 할 수있게 해주므로 미세 조정 요청 간격이 필요한 크롤러 스크립트에 이상적입니다.
https://gitbox.net/data-feed에서 데이터를 정기적으로 크롤링하고 싶다고 가정합니다. 서버에 압력을 가하지 않기 위해 각 요청의 간격을 300 밀리 초 (즉, 0.3 초)로 설정했습니다. 우리는 이것을 할 수 있습니다 :
<?php
$targetUrl = "https://gitbox.net/data-feed";
$maxRequests = 10;
for ($i = 0; $i < $maxRequests; $i++) {
$response = file_get_contents($targetUrl);
if ($response === false) {
echo "1. {$i} 요청이 실패했습니다\n";
} else {
echo "1. {$i} 요청이 성공적이었습니다,내용 길이:" . strlen($response) . "\n";
}
// 각 요청 후 잠을 자십시오 300 밀리 초(0.3 두번째)
$seconds = 0;
$nanoseconds = 300 * 1000000; // 300 밀리 초 = 300,000,000 纳두번째
time_nanosleep($seconds, $nanoseconds);
}
이 스크립트에서는 file_get_contents를 사용하여 https://gitbox.net/data-feed 에서 데이터를 가져 와서 각 요청 사이에 300 밀리 초의 정확한 지연을 보장하기 위해 Time_nanosleep (0, 30000000)를 사용했습니다.
time_nanoSleep은 성공을 나타내려면 참으로 반환됩니다. 지연이 중단되면 남은 시간 및 나노초를 포함한 배열을 반환합니다. 필요한 경우 오류 처리 또는 재 시도 로직을 수행 할 수 있습니다.
$result = time_nanosleep(0, 300000000);
if (is_array($result)) {
echo "지연이 중단되었습니다,남은 시간:{$result['seconds']} 두번째,{$result['nanoseconds']} 纳두번째\n";
}
차단되지 않으면 : time_nanoSleep을 사용하여 주파수를 제어하고 사용자 에이전트 로 브라우저 액세스를 시뮬레이션하여 대상 서버에서 크롤러로 식별 될 위험을 줄이는 데 도움이됩니다.
동적 간격 제어 : 웹 사이트 응답 시간 또는 서버로드에 따라 Time_NanoSleep 매개 변수를 동적으로 조정하여 크롤러 효율성과 안정성을 향상시킬 수 있습니다.
File_Get_Contents 대신 CURL 사용 : 실제 프로젝트에서 CURL은 더 강력한 오류 처리, 시간 초과 제어 및 요청 구성 기능을 제공하며 먼저 사용하는 것이 좋습니다.
PHP 크롤러에서 Time_nanosleep 의 합리적인 사용은 크롤링 프로세스의 안정성과 정확성을 크게 향상시킬 수 있습니다. 특히 밀리 초 수준의 제어 요청 빈도가 필요한 시나리오에서는 스케줄링 전략에서 강력한 도구가 될 수 있습니다. 우수한 오류 처리 메커니즘 및 액세스 전략을 결합하여 효율적인 크롤러 시스템을보다 강력하게 구축 할 수 있습니다.