我正在通过PHP cURL调用PayPal的TransactionSearch API。
不幸的是,API的响应速度很慢,有时需要30秒到5分钟以上(取决于从API返回的记录数)。
目前,该脚本正在运行一个cron作业,并逐个循环遍历每个客户。但是,如果客户数量增加,整个过程将需要很长时间(几个小时)才能完成。这还不够好。
基本上,我需要同时运行(和处理)多个API调用。实现这一目标的最佳途径是什么?
答案 0 :(得分:1)
由于瓶颈是远程服务器,我建议使用curl_multi_exec。您将立即处理大量HTTP连接,然后在一个线程中处理它们的结果。
这不是最快的解决方案,它可以在多个线程中提供响应时立即处理响应,但这种方法可以使处理速度提高50倍而不会发生重大变化。
答案 1 :(得分:0)
我建议您查看多线程处理过程,这是一个good Stack question,它有一些很好的例子来说明如何实现这一点。
答案 2 :(得分:0)
使用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 }'
但是,您应该监视可以在服务器上执行的并行执行数, 并在主cron文件myCron.php中提及该变量