@kolomat

Как ограничить количество одновременных подключений для multi cUrl?

Добрый день, использую multi cUrl для полученния данных
$mh = curl_multi_init();
foreach ($result as $i => $url) {

  $fetchURL = $url['id'];
 
  $multiCurl[$i] = curl_init();
  curl_setopt($multiCurl[$i], CURLOPT_URL,$fetchURL);
  curl_setopt($multiCurl[$i], CURLOPT_HEADER,0);
  curl_setopt($multiCurl[$i], CURLOPT_RETURNTRANSFER,1);
  curl_setopt($multiCurl[$i], CURLOPT_CUSTOMREQUEST, "GET");
  curl_multi_add_handle($mh, $multiCurl[$i]);
}
$index=null;
do {
	curl_multi_exec($mh,$index);

} while($index > 0);

foreach($multiCurl as $k => $ch) {
  $plans[$k] = json_decode(curl_multi_getcontent($ch), TRUE);
  curl_multi_remove_handle($mh, $ch);
}

Проблема стало в том что в массиве может находится до 1000 урлов, следовательно открывается 1000 соединений и сервер для 950 из них выдает 429 ошибку. Возможно ли как-то огранить для единаразового открытия количества соединений?
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 1
Oegir
@Oegir
Web-программист
/** @var int number of concurrent requests */
public $curlPoolSize = 10;

$chunks = array_chunck($resul, $this->curlPoolSize);
foreach ($chunks as $chunk) {
    // Do multi curl requests

    $index=null;
    do { // required
        curl_multi_exec($mh,$index);
    } while($index > 0);

    // And other things with curl results
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы