@GilbertAmethyst

Как не блокировать пул запросов в Guzzle?

Здравствуйте!

Необходимо сделать несколько асинхронных запросов и получить результаты. Пример из официальной документации Guzzle позволяет это сделать, но ожидание завершения всех запросов блокирует код. Можно ли сделать Promise на завершение всех запросов, чтобы wait() не блокировал код?

Пример:
<?php
set_time_limit(0);
date_default_timezone_set('UTC');

require __DIR__ . '/../vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;

$client = new Client();

$requests = function ($total) {
    $urls = [
	'http://httpbin.org/get',
	'http://httpbin.org/delay/2',
	'http://httpbin.org/get',
	];
    foreach ($urls as $url) {
        yield new Request('GET', $url);
    }
};

$pool = new Pool($client, $requests(5), [
    'concurrency' => 5,
    'fulfilled' => function (Response $response, $index) {
        echo $response->getStatusCode().PHP_EOL;
    },
    'rejected' => function (RequestException $reason, $index) {
        // this is delivered each failed request
    },
]);

// Initiate the transfers and create a promise
$promise = $pool->promise();

// Force the pool of requests to complete.
$promise->then(function(){
	echo 'END!';
})->wait();

echo 'Этот echo должен появиться сразу, не дожидаясь завершения всех запросов';
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 2
Surzhikov
@Surzhikov
Разработчик
GilbertAmethyst привет. Ты нашел решение этого вопроса?
Ответ написан
Комментировать
@marenkov
// Initiate the transfers and create a promise
$promise = $pool->promise();

echo 'Этот echo должен появиться сразу, не дожидаясь завершения всех запросов';
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
от 300 000 до 500 000 ₽
07 мая 2024, в 19:52
50000 руб./за проект
07 мая 2024, в 19:34
10000 руб./за проект
07 мая 2024, в 18:48
5000 руб./за проект