у нас есть следующая потенциальная ситуация:1000+ вызовов API с 1 cron-заданием?
Веб-приложение, которое может иметь 1000+ пользователей.
Мы хотим настроить cronjob для извлечения данных через API внешнего сервиса для ВСЕХ 1000 пользователей с одним вызовом cronjob (ПРИМЕЧАНИЕ: каждый пользователь имеет свои собственные учетные данные API с этим внешним API-сервисом)!
Что было бы разумным способом сделать это?
Информация:
- Один API вызова с учетными данными может занять до 5 секунд, чтобы получить данные обратно (!).
Возможный сценарий:
Cronjob вызывает локальный скрипт PHP (cronjobcall.php), что петли через все 1000 пользователей. Для каждого пользователя этот скрипт вызывает другой локальный скрипт через curl (localfile_calls_api.php), который делает фактический вызов API и сохраняет возвращенные данные в базу данных MySQL.
cronjobcall.php
foreach($ThousandsOfUsers as $UserId => $UserCredentials)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "localfile_calls_api.php?UserId=$UserId&UserCredentials=$UserCredentials");
curl_setopt($ch, CURLOPT_HEADER, 0);
$result=curl_exec($ch);
}
localfile_calls_api.php
// !!! this could take up to 5(!) seconds to return result
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://external_api_url.php?UserId=$UserId&UserCredentials=$UserCredentials");
curl_setopt($ch, CURLOPT_HEADER, 0);
$result=curl_exec($ch);
if($result)
{
save_to_MySql($result,$UserId);
}
Итак, вот почему я думаю, что расколоть всю процедуру в двух разных файлах PHP, так как API называют себя может занять до 5 секунд для возврата данных.
Это правильный подход?
Есть ли лучший способ сделать это?
Большое спасибо!
5 секунд? Почему это имеет значение? Почему вы думаете о том, чтобы положить вызов API в отдельный файл PHP, сделало бы * любую * разницу? Вы просматриваете колоссальные 5000 секунд для всех пользователей, вряд ли стоит дважды подумать. Просто поместите все в один файл PHP, и он будет работать * не иначе *, чем помещать их в два файла; нет никакой причины думать, что два файла как-то лучше/быстрее. – meagar
Зачем вам периодически обновляться данные? Если вам просто нужно это для пользователя, просто сделайте вызов api, когда пользователь входит в систему. – jeroen
Я думал, что было бы лучше ... но что мне делать за 5000 секунд? Это ок. 83 минуты! Как сервер может это сделать? У большинства серверов есть настройка для остановки загрузки страницы через 30-40 секунд ...? Есть ли лучший способ сделать это, чем цикл? – user1033406