@mishin_stanislav

Как сделать задержку в асинхронном запросе php?

Здравствуйте, друзья. Нужна помощь. Кто сможет подсказать, напишите, может вы сталкивались с такой проблемой. Вопрос заключается в следующем: мне нужно организовать асинхронные запросы к веб ресурсу через API(через синхронные запросы работает), мне нужно, чтобы между запросами была задержка несколько секунд и получал ответ от сервера. К примеру, когда я отправляю 100 http запросов, то мне нужно ждать пока все 100 не завершатся, и в конце выводится результаты этих запросов. Я хочу сделать асинхронный запрос: отправил запрос - получил ответ, задержка и потом опять запрос - ответ. Подскажите как это сделать.
  • Вопрос задан
  • 568 просмотров
Пригласить эксперта
Ответы на вопрос 2
coderisimo
@coderisimo
Думаю, для асинхронности тут нужны сторонние решения. Например отличный Guzzle - Concurrent requests
Guzzle
use GuzzleHttp\Client;
use GuzzleHttp\Promise;

$client = new Client(['base_uri' => 'http://httpbin.org/']);

$promises = [
    'image' => $client->getAsync('/image'),
    'png'   => $client->getAsync('/image/png'),
    'jpeg'  => $client->getAsync('/image/jpeg'),
    'webp'  => $client->getAsync('/image/webp')
];

//  когда все запросы завершатся
// если в одном из запросов ошибка
$results = Promise\unwrap($promises);

// когда все запросы завершатся , даже если были ошибки
$results = Promise\settle($promises)->wait();

// можно получить доступ к любому результату
// function.
echo $results['image']['value']->getHeader('Content-Length')[0]
echo $results['png']['value']->getHeader('Content-Length')[0]
Ответ написан
Kulaxyz
@Kulaxyz
Могу лучше
На клиенте можно сделать вызывая функцию с ajax-запросом через setTimeout(ajaxFunction, 1000) На сервере, используя в нужном месте sleep(1). При этом запросы посылать отдельно, а не все вместе.
Ответ написан
Ваш ответ на вопрос

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

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