gpt4 book ai didi

php - 使用 1 个 cron 作业进行 1000 多个 API 调用?

转载 作者:行者123 更新时间:2023-11-29 08:10:51 26 4
gpt4 key购买 nike

我们有以下潜在情况:

一个可以拥有 1000 多个用户的网络应用程序。

我们希望设置一个 cronjob,通过一个 cronjob 调用通过外部服务 API 为所有 1000 多个用户获取数据(注意:每个用户都有自己的与该外部 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 秒的时间才能返回数据。

这是正确的方法吗?

有更好的方法吗?

非常感谢!

最佳答案

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

  • 向表中添加两列:lastUpdatedisBeingProcessed(或类似内容);
  • 使用 cron 创建每 X(1?)分钟运行一次的脚本;
  • 在您的脚本中,获取具有最旧 lastUpdated 日期且尚未处理的 XX(10?)条记录,并设置 isBeingProcessed 标志;
  • 每次 API 调用完成后,更新用户信息,包括 lastUpdated 日期或时间并取消设置 isBeingProcessed 标志;

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

关于php - 使用 1 个 cron 作业进行 1000 多个 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21661370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com