2016-10-31 7 views
6

아래 스크립트는 무기한 작동하며 php myscript.php을 사용하여 시작됩니다.언제 curl_close()를 사용해야합니까?

http://example.com/longpolling.phpphp myscript.php과 통신 할 수있는 경우에만 응답하며, 아래의 말풍선 요청은 longpolling.php가 시간 제한에 도달하기 전에 시간 초과됩니다.

각 루프의 컬 연결을 닫았다가 다시 열거 나 무기한 열어 두어야합니까?

<?php 
// php myscript.php 
$options=[ 
    CURLOPT_URL=>'http://example.com/longpolling.php', 
    CURLOPT_RETURNTRANSFER=>true, 
    CURLOPT_CONNECTTIMEOUT => 300, 
    CURLOPT_TIMEOUT=> 300 
]; 
$ch  = curl_init(); 
curl_setopt_array($ch, $options); 
while (true) { 
    $rsp = curl_exec($ch); 
    // Do something 
    //curl_close($ch); //should I close and reopen? 
} 
+0

while 루프에서 'curl_close'를 사용하면 curl을 다시 초기화해야합니다. 왜냐하면 curl_init는 새로운 세션을 초기화하고 curl_setopt(), curl_exec() 및 curl_close() 함수와 함께 사용할 cURL 핸들을 반환합니다. – Kumar

+0

@ 쿠마. 메모리/성능/안정성의 이유가 있습니까? – user1032531

+0

@apokryfos 나는 그렇게하는 것이 옳다는 말은 아니지만 완벽하게 작동하는 것처럼 보인다. 그것이 "단일 요청을 처리하기로되어있다"는 것이 문서화되어 있습니까? – user1032531

답변

2

. cURL은 서버에 대한 각 HTTP 요청에 대해 동일한 TCP 연결을 다시 사용합니다.

Here 또한이 문제에 대한 좋은 벤치 마크입니다.

0

종료 조건이 누락되었습니다. 그것은 원격 스크립트의 응답의 가정, 당신의 코드가 있어야한다 : URL이 성능의 증가로 이어질 것 핸들을 재사용 동일한 서버에있는 경우

<?php 
// php myscript.php 
$options=[ 
    CURLOPT_URL=>'http://example.com/longpolling.php', 
    CURLOPT_RETURNTRANSFER=>true, 
    CURLOPT_CONNECTTIMEOUT => 300, 
    CURLOPT_TIMEOUT=> 300 
]; 
$ch  = curl_init(); 
curl_setopt_array($ch, $options); 
$rsp = false; 
while (!$rsp) { 
    $rsp = curl_exec($ch); 
} 
curl_close($ch); 
// Do something 
+1

$에서 while (! rsp) => while (! $ rsp) – Fky

+0

실제로. 건배. –