使用php和cron扩展curl

使用php和cron扩展curl,php,curl,cron,scaling,Php,Curl,Cron,Scaling,我正在尝试使用PHP创建一个网站监控webapp。目前,我正在使用curl从不同的网站收集标题,并在网站状态发生变化时更新MySQL数据库(例如,如果一个“向上”的网站变为“向下”) 我正在使用curl_multi(通过我稍微修改过的类)并行处理20个站点(这似乎给出了最快的结果),并使用CURLOPT_NOBODY确保只收集标题,并且我尝试简化脚本以使其尽可能快 它工作正常,我可以在大约2-4秒内处理40个站点。我的计划是每分钟通过cron运行脚本。。。所以看起来我每分钟可以处理大约600个网

我正在尝试使用PHP创建一个网站监控webapp。目前,我正在使用curl从不同的网站收集标题,并在网站状态发生变化时更新MySQL数据库(例如,如果一个“向上”的网站变为“向下”)

我正在使用curl_multi(通过我稍微修改过的类)并行处理20个站点(这似乎给出了最快的结果),并使用CURLOPT_NOBODY确保只收集标题,并且我尝试简化脚本以使其尽可能快

它工作正常,我可以在大约2-4秒内处理40个站点。我的计划是每分钟通过cron运行脚本。。。所以看起来我每分钟可以处理大约600个网站。虽然目前这还不错,但从长远来看这还不够

那么我该如何衡量这一点呢?是否有可能并行运行多个cron,或者会遇到瓶颈问题

我突然想到,我可以将数据库分成400个组,并为这些组运行单独的脚本(例如,IDS1-400、401-800、801-1200等可以运行单独的脚本),这样就不会有数据库损坏的危险。这样,每个脚本将在一分钟内完成


但是,感觉这可能不起作用,因为运行curl_multi的一个脚本似乎在并行处理20个请求时达到了最大性能。那么,这会起作用还是有更好的方法?

是的,简单的解决方案是使用相同的PHP CLI脚本并传递args 1和args 2,即指示处理包含每个站点信息的db记录的最小和最大范围

例如crontab列表
*****php/user/script.php 1400
*****php/user/script.php 401 800

或者使用单个脚本,可以触发多线程(PHP中的多线程和pthreads)。但cron间隔应基于完成800个站点的基准

参考:

脚本多线程在3分钟内完成
然后用*/3表示间隔。

谢谢-这是一个很大的帮助。我认为我不能使用pthreads,因为“pthreads扩展不能在web服务器环境中使用”,而这是在web服务器上使用的。