PHP API для нескольких вызовов - PullRequest
3 голосов
/ 25 января 2011

Я выполняю вызовы через API TransactionSearch PayPal через PHP cURL.

К сожалению, API реагирует очень медленно, иногда это занимает от 30 секунд до более 5 минут (в зависимости от количества возвращаемых записей).из API) для одного клиента.

В настоящий момент скрипт запускает задание cron и последовательно перебирает каждого клиента.Однако, если количество клиентов увеличится, весь процесс займет очень много времени (несколько часов).Это недостаточно хорошо.

По сути, мне нужно выполнять (и обрабатывать) несколько вызовов API одновременно.Какой лучший способ добиться этого?

Ответы [ 3 ]

1 голос
/ 11 июля 2011

Поскольку узким местом является удаленный сервер, я предлагаю использовать curl_multi_exec . Вы будете обрабатывать большое количество HTTP-соединений одновременно, а затем обрабатывать их результаты в одном потоке.

Это не самое быстрое решение, которое будет обрабатывать ответы, как только они будут доступны в нескольких потоках, но этот подход может сделать обработку в 50 раз быстрее без существенных изменений.

0 голосов
/ 11 июля 2011

Используя PHP, это простой способ сделать так, чтобы в нем было несколько процессов:

  1. Создание файла curlWorker.php: Это обрабатывает запрос CURL и отслеживает результат (в базе данных).например ).Он получает необходимые параметры через командную строку в виде строки json, которая декодируется в скрипте.

  2. Создайте главный файл 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 }'
    
  3. Однако вы должны следить за тем, сколько параллельных исполняемых файлов вы можете выполнить на своем сервере, и упомянуть эту переменную в вашем основном файле cron myCron.php

0 голосов
/ 25 января 2011

Я бы посоветовал изучить многопоточность вашего процесса. Вот хороший вопрос стека , в котором есть несколько замечательных примеров того, как этого добиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...