2016-10-31 6 views
6

Нижеприведенный скрипт будет работать бесконечно и будет инициирован с использованием php myscript.php.Когда следует использовать curl_close()?

http://example.com/longpolling.php ответит только в том случае, если у него есть что-то сообщить по телефону php 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

Если вы используете 'curl_close' в цикле while, вам нужно снова инициализировать завиток. потому что curl_init, инициализирует новый сеанс и возвращает дескриптор cURL для использования с функциями curl_setopt(), curl_exec() и curl_close(). – Kumar

+0

@ Kumar Точно. Существуют ли причины для обеспечения памяти/производительности/надежности? – user1032531

+0

@apokryfos Я не говорю, что это правильно, но, похоже, он отлично работает, оставив его открытым. Документировано ли это, что он «должен обрабатывать один запрос»? – user1032531

ответ

2

Если URL-адреса находятся на том же сервере, повторное использование ручки приведет к увеличению производительности. cURL повторно использует одно и то же соединение TCP для каждого HTTP-запроса на сервере.

Here также является отличным эталоном для этой проблемы.

0

Вам не хватает условия выхода. Если предположить, что это ответ от удаленного сценария, то ваш код должен быть:

<?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

Отсутствует $ at while (! Rsp) => while (! $ Rsp) – Fky

+0

Действительно. Приветствия. –