我需要编写一个 cron (php) 脚本来从多个网站获取 html 结果。
假设我的数据库有 50 个网站记录(即 http://www.somewebsite.com/page.php)。因此 cron 作业将设置为每 x 分钟运行一次。当它运行时,它会从数据库加载记录,检查每个网站的状态,然后从中获取 HTML 结果并进行分析。
我担心的是,如果第n条记录中的网站没有响应,或者加载需要一些时间(即海外网站),那么第n+1条记录将不会运行,直到第n条记录完成,那么这个 cron 作业将需要一段时间才能完成。
如果我在浏览器上执行脚本,那么可以使用ajax异步轻松处理它,但是这是一个cron作业,所以我不知道如何处理这种情况。
这是你可以做的, 从 crontab 运行 sh 脚本,并在脚本中调用处理异步任务的 .php 程序。
我认为如果需要“异步”,最好转向其他语言。这是对创建整体系统架构方式的重大升级。因此,对于任何 PHP 开发人员来说,这都是一次重大升级,因为我自己在 PHP 上投入了大量资金,并寻求 NodeJS 来寻求更好的解决方案。尽管引入了术语“Aync”,但 PHP 内部或核心尚不支持此类需求。
我一直在努力应对多个 cron 的问题,这需要花费大量时间。这是我发现的可以解决我问题的东西。
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
属性CURLOPT_TIMEOUT_MS定义了curl在继续执行之前等待响应的时间(以毫秒为单位)。将其设置为 1 本质上意味着没有延迟。
这是可能的,甚至相当容易。您正在寻找的不是异步,而是并行。
您正在寻找的称为消费者:您有一个任务列表,并且一个或多个消费者在该列表中工作。当消费者可用时,它会向列表(也称为队列)询问列表中的下一个任务。
这意味着这将会发生
您可以选择(至少)两条路线: