Php 1000+;使用1个cron作业调用API?

Php 1000+;使用1个cron作业调用API?,php,mysql,api,curl,cron,Php,Mysql,Api,Curl,Cron,我们有以下潜在情况: 可能有1000多名用户的web应用程序 我们希望设置一个cronjob,通过一个外部服务API为所有1000多个用户获取数据,只需一个cronjob调用(注意:每个用户都有自己的API凭证,使用该外部API服务) 什么是明智的做法 信息: 一个具有凭据的API调用可能需要5(!)秒才能恢复数据 可能的脚本: Cronjob调用一个本地php脚本(cronjobcall.php),该脚本循环遍历所有1000个用户。对于每个用户,该脚本通过curl(localfile_ca

我们有以下潜在情况:

可能有1000多名用户的web应用程序

我们希望设置一个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_调用_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秒钟才能返回数据

这是正确的方法吗

有更好的方法吗


非常感谢

如果您确实需要定期为每个用户进行API调用,我会以不同的方式进行设置:

  • 向表中添加两列:
    lastUpdated
    isBeingProcessed
    (或类似内容)
  • 使用cron制作每X(1?)分钟运行一次的脚本
  • 在脚本中,获取XX(10?)记录,其中包含最早的
    lastUpdated
    日期和未处理的日期,并设置
    isbeingProcessing
    标志
  • 当每个API调用完成时,更新用户信息,包括取消设置
    正在处理的
    标志的
    lastUpdated
    日期或时间

根据您的服务器可以处理什么以及API允许什么,您甚至可以将其设置为同时/重叠运行多个作业,从而大大减少更新的总时间。

5秒?这有什么关系?为什么您认为将API调用放在一个单独的PHP文件中会有任何不同?对于所有用户来说,这是一个惊人的5000秒,几乎不值得再三考虑。只需将所有内容放在一个PHP文件中,它的工作方式与将它们放在两个文件中没有什么不同;根本没有理由认为两个文件更好/更快。为什么需要定期刷新数据?如果你只是用户需要它,只要在用户登录时调用api就行了。我想那会更好…但是我用5000秒怎么办?大约83分钟!服务器如何做到这一点?大多数服务器都设置为在30-40秒后停止页面加载。。。?有没有比这样循环更好的方法呢?数据需要通过API定期更新,因为外部服务的每个用户的数据都会定期更改。把它想象成“推特”API等。。。每个Twitter用户都有不同的数据,可以使用自己的API凭据通过API获取。@user1033406“大多数服务器都设置为在30-40秒后停止页面加载…?”您误解了“页面加载”的含义。从cron作业执行的PHP脚本没有超时。没有“页面加载”和请求,也没有超时。脚本将一直运行,直到完成。5000秒或5000小时,没关系。