Как работает cURL Keep-alive?

Я работал над этим и не мог найти способ понять это полностью.

У меня есть этот код:

 <?php
function get2($url) {
// Create a handle.
$handle = curl_init($url);

// Set options...

// Do the request.
$ret = curlExecWithMulti($handle);

// Do stuff with the results...

// Destroy the handle.
curl_close($handle);

}

function curlExecWithMulti($handle) {
// In real life this is a class variable.
static $multi = NULL;

// Create a multi if necessary.
if (empty($multi)) {
$multi = curl_multi_init();
}

// Add the handle to be processed.
curl_multi_add_handle($multi, $handle);

// Do all the processing.
$active = NULL;
do {
$ret = curl_multi_exec($multi, $active);
} while ($ret == CURLM_CALL_MULTI_PERFORM);

while ($active && $ret == CURLM_OK) {
if (curl_multi_select($multi) != -1) {
do {
$mrc = curl_multi_exec($multi, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}

// Remove the handle from the multi processor.
curl_multi_remove_handle($multi, $handle);

return TRUE;
}

?>

Приведенный выше скрипт делает следующее: я запускаю PHP, и он создает новое TCP-соединение, возвращает данные и затем закрывает соединение.

Сервер работает по HTTP 1.1 и соединению: keep-alive.

Что я хочу, так это то, что если я запустил скрипт, он создаст соединение, вернет данные и НЕ закроет соединение, а при повторном запуске PHP-скрипта будет использовать то же соединение (конечно, если это соединение не истекло после истечения времени ожидания сервера) ,

Это возможно с cURL? Я понимаю multi в cURL неправильно?

0

Решение

Когда программа завершает работу, все ее открытые сокеты (в действительности, все открытые файлы) закрываются. Невозможно повторно использовать соединение из одного экземпляра в другой (*). Вы должны заново открыть новое соединение или цикл в вашем приложении.

Если вы хотите использовать HTTP Keep-Alive, ваша программа не должна закрываться.

(*) Есть способы сохранить сокет открытым внутри одного процесса и передать его другим через доменные сокеты Unix, но это сложная тема, против которой я рекомендую; Я упоминаю это только для полноты.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]