Как ограничить по времени curl запрос?

Использую multi_curl для параллельных запросов на сервер.

$multi = curl_multi_init();

foreach ($array as $item) {
  $ch = curl_init();
  curl_setopt_array($ch, [
     CURLOPT_URL => "http://{$item['ip_address']}/...",
     CURLOPT_FRESH_CONNECT => true,
     CURLOPT_NOBODY => true,
     CURLOPT_CONNECTTIMEOUT_MS => 200,
     CURLOPT_TIMEOUT_MS => 2000
  ]);
  curl_multi_add_handle($multi, $ch);
}
...
$running = null;
do {
    curl_multi_exec($multi, $running);
} while ($running);
...
Log::info(json_encode(['info' => curl_getinfo($data['channel']));

Из 100 параллельных запросов 3 могут выполняться больше 5 сек (total_time":5.166296). Если ещё раз запустить скрипт, то уже другие запросы могут так отвалиться, а первые нормально выполняться с кодом 200. Как сделать так, чтобы total_time не превышал хотябы 2 сек. ?

Результат в логах у ондного такого запроса:

"info":{
  "url":"...",
  "content_type":null,
  "http_code":0,
  "header_size":0,
  "request_size":0,
  "filetime":-1,
  "ssl_verify_result":0,
  "redirect_count":0,
  "total_time":5.286024,
  "namelookup_time":0,
  "connect_time":0,
  "pretransfer_time":0,
  "size_upload":0,
  "size_download":0,
  "speed_download":0,
  "speed_upload":0,
  "download_content_length":-1,
  "upload_content_length":-1,
  "starttransfer_time":0,
  "redirect_time":0,
  "redirect_url":"",
  "primary_ip":"",
  "primary_port":0,
  "local_ip":"",
  "local_port":0,
  "http_version":0,
  "protocol":0,
  "ssl_verifyresult":0,
  "scheme":"",
  "appconnect_time_us":0,
  "connect_time_us":0,
  "namelookup_time_us":0,
  "pretransfer_time_us":0,
  "redirect_time_us":0,
  "starttransfer_time_us":0,
  "total_time_us":5286024

}


Ответы (0 шт):