检查大量源时如何处理缓慢的服务器回复


How to handle slow server replies when checking a large number of feeds?

如果有新项目,我需要用PHP检查几百个RSS/Atom提要并更新MySQL数据库。该脚本由 cron 守护程序以一定的时间间隔运行。

我遇到的问题是许多托管提要的服务器回复速度非常慢,所以我试图增加我的 PHP 脚本的超时,但结果是现在脚本有时会运行几分钟,我知道这并不理想,它最终仍然停止处理并且不会完成所有提要。

我知道并非所有提要都已完成,

因为数据库中的最后一个条目永远不会更新,即使提要已完成。我没有收到邮寄给我的错误,但通过查看提要和数据库来手动检查。

处理此问题的最佳(或良好(做法是什么?

  1. 从终端运行它
  2. 将每个提要视为自己的工作/任务
  3. 确保这些作业/任务不会相互阻止。
  4. 要实现 (3( 在多个线程/进程中运行您的 PHP 脚本(每个源一个(
    1. 使用队列系统来管理作业(ZeroMQ,RabbitMq,Gearman ...(
    2. 使用 PHP 或 it 库来管理作业 (http://php.net/manual/en/book.pcntl.php,http://reactphp.org/(
    3. 或者使用队列系统和PHP工具。

因此,最终您将拥有一个一次只能抓取和处理一个提要的PHP脚本/worker。还有一些东西告诉它要抓住什么饲料。

这样,您就可以知道哪些提要失败或花费太长时间而不会阻止其余提要。