@Suxoi

Multi_curl пропускает запросы, почему?

Есть скрипт, вроде работает, но пропускает от 1-5% запросов, а нужно чтобы были загружены 100%
В чем может быть причина?Или какая-то альтернатива?

const THREADS = 30;
       const  TIMEOUT = 20;
        unset($urls_pack);
	$data = [];
	$urls_pack = [ ];
	for( $i = 0; $i < count( $org_data ); $i = $i + THREADS ) {
		$urls_pack[] = array_slice( $org_data, $i, THREADS );
	}
	foreach( $urls_pack as $pack ) {
		$mh = curl_multi_init();
		unset( $conn );

		foreach( $pack as $i => $url ) {
			$conn[ $i ] = curl_init( trim( $url[ 'url' ] ) );

			curl_setopt( $conn[ $i ], CURLOPT_RETURNTRANSFER, 1 );
			curl_setopt( $conn[ $i ], CURLOPT_TIMEOUT, TIMEOUT );
			curl_setopt( $conn[ $i ],  CURLOPT_HEADER, false);
			curl_multi_add_handle( $mh, $conn[ $i ] );
		}
		$active = null;
		do {
			usleep( 5000 );
			$mrc = curl_multi_exec( $mh, $active );
		} while ( $mrc == CURLM_CALL_MULTI_PERFORM );

		while ( $active && $mrc == CURLM_OK ) {

			if ( curl_multi_select( $mh ) == -1 ) {
				usleep( 10000 );
			}

			do {
				$mrc = curl_multi_exec( $mh, $active );
			} while ( $mrc == CURLM_CALL_MULTI_PERFORM );
		}

		foreach( $pack as $i => $url ) {
			$result = curl_multi_getcontent( $conn[ $i ] );
			$current_data = json_decode( $result, true );
			if( !$current_data ) {
				continue;
			}
			foreach( $current_data as $item ) {
				.........
			}

		}
		curl_multi_close( $mh );
	}
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 1
4utka_pyan
@4utka_pyan
Может не пропускает, а просто ответ не приходит, или приходит с таймаутом превышающим допустимый? Альтернатива - проверять на корректность ответа каждый ответ и если он не пришёл делать запрос повторно, правда с Multi_curl как раз это несколько геморно проще сделать в одном curl но несколько параллельных скриптов тогда уж.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 10:32
400000 руб./за проект
24 апр. 2024, в 10:12
10000 руб./за проект