【问题标题】:Using cURL in a loop - too slow probleme在循环中使用 cURL - 太慢的问题
【发布时间】:2023-03-25 18:35:02
【问题描述】:

我有一个大数据库表,我提取列来提取电话号码以将其放入 curl POST,那么如何增加时间?因为我在while循环中为找到的每一行执行curl,谢谢帮助。

【问题讨论】:

  • 先向我们展示您的尝试。
  • 为什么要对每一行执行一个请求?收集结果并使用请求数组执行 一个 请求...性能会更好

标签: php json performance curl time


【解决方案1】:

使用 CURL 时,您取决于与远程服务器通信所需的时间。除了确保您的服务器托管在能够快速加载远程网站的良好服务提供商上之外,没有办法加快单个 CURL 请求。

您可以通过并行运行 CURL 请求来加速您的脚本。为此,请将 CURL 函数移动到一个单独的 PHP 文件中,该文件通过命令行参数 ($argv) 接收电话号码作为参数。 该脚本还应包含用于使用 CURL 结果更新数据库的代码。

然后,使用 exec() 调用脚本。例如,如果脚本是 checkphone.php,就这样调用它:

exec('php -f /var/www/include/checkphone.php '.$phoneNumber.' > /dev/null 2>&1 &');

请注意,提供了完整目录。另外,使用:

/dev/null 2>&1 &

让系统知道不要等待脚本完成运行。它将执行 checkphone.php 然后继续循环遍历。

请注意:如果您有数百个电话号码,这将打开数百个进程,并且很可能会使您的服务器崩溃。在您的主脚本中构建控件以确保一次只打开几个并发进程。这可以通过查询数据库来查看您作为参数发送的电话号码是否已使用 CURL 脚本的附加信息进行了更新。 此外,请确保您不要向远程服务器发送太多请求太快,否则您将最终对服务器进行 DDoSing,这是一个禁忌。 如果您有多个可以为您提供所需信息的远程站点,请考虑在它们之间进行迭代。

【讨论】:

  • 嗨,IDAN,感谢您提供如此详细的答案,现在我非常了解 curl 的功能,我将尝试按照您提到的那样优化我的脚本,因为我当前的代码需要 2 到 3 秒来处理一个单一的 curl 调用,但正如你所说,如果我加快速度,它会吐出目标服务器,再次感谢你,美好的一天。
【解决方案2】:

将所有请求发送到一个,然后只发送一个请求。这可行吗?还是目标每次请求只接受一个电话号码?

【讨论】:

  • 嗨 MIRO,是的,目标每个请求只接受一个值,这需要 2 到 3 秒来处理
猜你喜欢
  • 1970-01-01
  • 2016-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 2014-10-12
  • 1970-01-01
相关资源
最近更新 更多