Я запускаю вызовы в API TransactionSearch PayPal через PHP cURL.
К сожалению, API очень медленно реагирует, иногда занимает от 30 секунд до более 5 минут (в зависимости от количества записей, возвращаемых API) для одного клиента.
На данный момент скрипт запускает задание cron и каждый раз перебирает каждого клиента. Однако, если количество клиентов увеличится, весь процесс займет очень много времени (несколько часов) для завершения. Это недостаточно.
По сути, мне нужно запускать (и обрабатывать) несколько вызовов API одновременно. Каков наилучший способ достичь этого?
Поскольку узким местом является удаленный сервер, я предлагаю использовать curl_multi_exec . Вы будете обрабатывать большое количество HTTP-соединений одновременно, а затем обрабатывать их результаты в одном потоке.
Это не самое быстрое решение, которое будет обрабатывать ответы, как только они будут доступны в нескольких потоках, но этот подход может сделать обработку в 50 раз быстрее без существенных изменений.
Я бы предложил посмотреть в Multi Threading ваш процесс. Вот хороший вопрос о стеке, в котором есть отличные примеры того, как это сделать.
Используя PHP, это простой способ сделать его несколькими процессами:
Создайте файл curlWorker.php: обрабатывает запрос CURL и отслеживает результат (например, в базе данных). Он получает необходимые параметры через командную строку как строку json, которая декодируется в скрипте.
Создайте основной файл cron myCron.php, который выполняет цикл и вызывает curlWorker.php с параметрами, указанными в командной строке в виде строки json:
for Data-to-process { $cmd = "usr/bin/php path-to-curlWorker.php '$jsonStringParamters' > /dev/null 2>/dev/null &"; exec($cmd); } // example : /usr/bin/php curlWorker.php '{ "uid" : "abc123" , "amount" : 20.3 }'
Однако вы должны контролировать, сколько параллельных execs вы можете выполнить на своем сервере, и укажите эту переменную в основном файле cron myCron.php