Всем привет. Нужна помощь с 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 ответов

62 просмотра

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

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

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта