curl — Выполнить ~ 500 запросов из PHP, используя все современные возможности HTTP / 2

Я разрабатываю некоторое промежуточное программное обеспечение (фактически инструмент для очистки) и мне нужно отправить ~ 500 запросов POST на один сервер для получения ответов. Сервер поддерживает HTTP / 2. Я использую PHP 7.1 с libcurl / 7.53.1, то есть все версии подходят.

Как быстро выполнить ~ 500 запросов из PHP, используя все современные возможности HTTP / 2? Я написал много скриптов с обычным повторным использованием ручки curl, но на самом деле не понимал, что нужно для аналогичной обработки ответов с мультиплексированием.

Мой код:

$mh = curl_multi_init();
$chs = array();
$active = 0;
curl_multi_setopt($mh, CURLMOPT_PIPELINING, 1);
curl_multi_setopt($mh, CURLMOPT_MAXCONNECTS, 8);

$res = array();
$portals = array();

for ($i=0; $i<count($tiles); $i++) {
$post = json_encode($tile_data);
$ch = curl_init();
$options = array(
CURLOPT_URL => "https://www.example.com/v1/getTile",
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0
);
curl_setopt_array($ch, $options);
$chs[$tiles[$i]] = $ch;
curl_multi_add_handle($mh, $ch);
}

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

for ($i=0; $i<count($tiles); $i++) {
$ch = $chs[$tiles[$i]];
#    $req_ok = false;
#    while ($req_ok == false) {
$raw = curl_multi_getcontent($ch);
$data = json_decode($raw, true);
#        if (isset($data['result']['map'][$tiles[$i]]['entities'])) {
#            $req_ok = true;
curl_multi_remove_handle($mh, $ch);
#        }
#    }
array_push($res, $data);
}

Это работает, но если я раскомментирую строки для проверки ответа, это больше не работает (зависание). Мне нужно проверить ответы и отправить запрос, если сервер вернул что-то не так. Также я не знаю, где в этом коде я могу поставить функцию, которая будет отображать прогрессбар для моей консоли, потому что мне не ясно, когда отправляются отдельные запросы. Я надеюсь, что кто-нибудь уже реализовал подобный код и может объяснить мне, что мне нужно изменить. Благодарю.

1

Решение

Задача ещё не решена.

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

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

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