Когда следует использовать curl close ()?

приведенный ниже скрипт будет работать бесконечно и будет инициирован с помощью php myscript.php.

http://example.com/longpolling.php будет отвечать, только если ему есть что сообщить php myscript.php и ниже запрос curl будет тайм-аут до longpolling.php достигнет своего ограничения по времени.

должен ли я закрыть и снова открыть соединение curl каждый цикл или держать его открытым бесконечно.

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

2 ответов


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

здесь также является хорошим ориентиром для этой проблемы.


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

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