cURL을 여러 번 사용하여 3 개의 다른 API를 호출하는 함수가 있습니다. 각 API의 결과는 중첩 된 루프에서 호출되는 다음 API로 전달되므로 cURL은 현재 500 번 이상 열리고 닫힙니다.cURL을 닫아야합니까?
전체 기능에 대해 cURL을 열어 두어야하나요, 아니면 한 번에 여러 번 열거 나 닫을 수 있습니까?
cURL을 여러 번 사용하여 3 개의 다른 API를 호출하는 함수가 있습니다. 각 API의 결과는 중첩 된 루프에서 호출되는 다음 API로 전달되므로 cURL은 현재 500 번 이상 열리고 닫힙니다.cURL을 닫아야합니까?
전체 기능에 대해 cURL을 열어 두어야하나요, 아니면 한 번에 여러 번 열거 나 닫을 수 있습니까?
동일한 핸들을 다시 사용하면 성능이 향상됩니다. 참조 : 당신이 동기로 요청을 필요로하지 않는 경우 Reusing the same curl handle. Big performance increase?
는 * curl_multi_를 사용하여 기능을 고려해도 큰 성능 향상을 제공한다 (예를 들어 curl_multi_init, curl_multi_exec 등).
UPDATE :
나는 각 요청에 대해 새로운 핸들을 사용하여 다음과 같은 코드로 동일한 핸들을 사용하여 컬을 benching 시도 :
Curl without handle reuse: 8.5690529346466
Curl with handle reuse: 5.3703031539917
:
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
for ($i = 0; $i < 100; ++$i) {
$rand = rand();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/?rand=" . $rand);
curl_exec($ch);
curl_close($ch);
}
$end_time = microtime(true);
ob_end_clean();
echo 'Curl without handle reuse: ' . ($end_time - $start_time) . '<br>';
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
$ch = curl_init();
for ($i = 0; $i < 100; ++$i) {
$rand = rand();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/?rand=" . $rand);
curl_exec($ch);
}
curl_close($ch);
$end_time = microtime(true);
ob_end_clean();
echo 'Curl with handle reuse: ' . ($end_time - $start_time) . '<br>';
다음과 같은 결과를 얻었다
동일한 핸들을 재사용하면 실제로 동일한 서버에 여러 번 연결할 때 성능이 크게 향상됩니다. 나는 다른 서버에 연결 시도 :
$url_arr = array(
'http://www.google.com/',
'http://www.bing.com/',
'http://www.yahoo.com/',
'http://www.slashdot.org/',
'http://www.stackoverflow.com/',
'http://github.com/',
'http://www.harvard.edu/',
'http://www.gamefaqs.com/',
'http://www.mangaupdates.com/',
'http://www.cnn.com/'
);
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
foreach ($url_arr as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);
}
$end_time = microtime(true);
ob_end_clean();
echo 'Curl without handle reuse: ' . ($end_time - $start_time) . '<br>';
ob_start(); //Trying to avoid setting as many curl options as possible
$start_time = microtime(true);
$ch = curl_init();
foreach ($url_arr as $url) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
}
curl_close($ch);
$end_time = microtime(true);
ob_end_clean();
echo 'Curl with handle reuse: ' . ($end_time - $start_time) . '<br>';
을 다음과 같은 결과를 얻었다 :
Curl without handle reuse: 3.7672290802002
Curl with handle reuse: 3.0146431922913
여전히 꽤 상당한 성능 향상을.
컬이 keep을 사용하고 있는지 궁금합니다. - 연결 유지. 이것만으로도 대부분의 성능 향상을 설명 할 수 있습니다. – goat
나는 cURL이 keep-alive를 사용한다고 믿지만, curl_exec()를 호출 할 때마다 새로운 요청이 시작된다. (옵션이 바뀌었기 때문이다.) 특히 다른 서버에 연결할 때 그렇다. – AlliterativeAlice
모두에게 감사드립니다. 동일한 서버이지만 다른 URL에 연결하는 동안 Otome은 게시 한 벤치 마크에 놀랐습니다. 그러나 나는 크리스가 게시 한 신뢰성 포인트를 정말로 좋아한다. ..... – makenoiz
사용법 및 코드 처리 방법을 보지 않고 매우 모호한 질문입니다. –
나는 신뢰성 측면에서 실수하는 경향이 있으며 신선한 핸들을 만들면 요청에서 남은 상태가 미래 요청을 오염시킬 가능성이 적기 때문에 신선한 핸들이 덜 문제가되는 것처럼 보입니다. 그 말로는, 나는 몇 주 동안 정기적으로 실행되는 프로세스를 가지고 있으며, 같은 컬링 핸들에서 백만 건의 HTTP 요청을 처리합니다. 단일 도메인의 단일 API에 대한 매우 일반적인 http 요청입니다. 나는 아무 문제도 경험하지 않았다. – goat
[CURLs 함수를 사용할 수있는 경우] curl \ _close? (http://stackoverflow.com/questions/3849857/when-to-use-curls-function-curl-close) –