Всем привет. Нужна помощь с guzzle. Есть ссылка с получением данных из

БД site.ru/controller-name/company, там данные вида
{"data":[{"company":"Компания1","login":"login1","token":"token1"},…]}.
Есть скрипт, который берёт 10 логинов и токенов, получает по ним инфу асинхронно подставляет полученные логин и токен по другой ссылке $url = ”site.ru/controller-name/get-stat ?login=$login&token=$token&dateFrom=" . date('Y-m-d', strtotime('-30 days')) . "&dateTo=" . date('Y-m-d'); там данные типа:
{ "Name1": 111, "Name2": 222, "Name3": 333.33, "Name4": 444, "Name5": 555, "Name6": 666.6,... }
,затем записывает в переменную все эти данные по каждому логину и выводит результат в json. Но, сейчас всё время при выполнении 504 Gateway Time-out . Скажите пожалуйста, куда копать, и где может быть ошибка?

public function actionTestStat()
{
$client = new Client();
// Получаем все проекты
$response = $client->get('http:// site.ru/controller-name/company');
$data = json_decode($response->getBody(), true);
$logins = array_column($data['data'], 'login');
$chunkSize = 10;
$promises = [];
$loginChunks = array_chunk($logins, $chunkSize);
foreach ($loginChunks as $loginsChunk) {
// Формируем список запросов для каждого логина
foreach ($loginsChunk as $login) {
// Находим соответствующий логину элемент в данных
$company = array_filter($data['data'], function ($item) use ($login) {
return $item['login'] === $login;
});
if (!empty($company)) {
// Получаем токен из найденного элемента
$token = reset($company)['token'];
// Формируем URL для запроса
$url = "http://site.ru/controller-name/get-stat?login=$login&token=$token&dateFrom=" . date('Y-m-d', strtotime('-30 days')) . "&dateTo=" . date('Y-m-d');
// Добавляем запрос в список асинхронных запросов
$promises[] = $client->getAsync($url);
}
}
// Задержка в 1 секунду перед следующей группой запросов
sleep(1);
}
// Ожидаем выполнения всех асинхронных запросов и получаем результаты
$results = Promise\Utils::settle($promises)->wait();
// Обрабатываем результаты
foreach ($results as $result) {
$response = $result['value'];
if ($response->getStatusCode() === 200) {
$data = json_decode($response->getBody(), true);
// Обрабатываем полученные данные
echo "Name1: " . $data[' Name1'] . "<br>";
echo "Name2: " . $data[' Name2'] . "<br>";
echo "Name3: " . $data[' Name3'] . "<br>";
echo "Name4: " . $data[' Name4'] . "<br>";
echo "Name5: " . $data[' Name5'] . "<br>";
echo "Name6: " . $data[' Name6'] . "<br>";
echo "<br>";
}
}
}

4 ответов

18 просмотров

зачем пихаешь всё в экшн? Чем тебе не устраивает сервисный слой и DI-контейнер?

Андрей- Автор вопроса

а чем это чревато? просто на yii2 буквально чуть больше месяца пишу, не знаю всех нюансов еще. он эту ошибку выдаёт даже если ограничить до 10 логинов. Хотя, сама страница с данными по логину грузится за секунду буквально. И если последовательно выполнить запрос, тип один за другим логин подставлять по ссылке, то всё норм, а вот параллельно выдает всегда 504.

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

Обсуждают сегодня

Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Ребят, а больше никто поработать не хочет? Кто свободен?
AIZ
4
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
знаешь как они вообще работают?
Akcium Сергей
3
Всем привет. Есть кто разбирается в платежках? Что б принимать из других стран и выплачивать рф снг
Musa
6
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Карта сайта