我正在使用 CakePHP 构建一个网站,该网站处理通过 XML-RPC API 和 Web 前端上传的文件。文件需要被 ClamAV 扫描,需要生成缩略图等等。所有需要一些时间的资源密集型工作,用户不必等待。所以,我正在研究一般的 PHP 异步处理,特别是 CakePHP。
我遇到了看起来很有前途的 CakePHP的MultiTask 插件。我还遇到了各种消息队列实现,例如dropr和beanstalkd。当然,我还需要某种后台进程,可能使用某种 Cake Shell 来实现。我看到 MultiTask 使用PHP_Fork来实现一个多线程的 PHP 守护进程。
我需要一些关于如何以最佳方式将所有这些部分组合在一起的建议。
- 用 PHP 编写一个长期运行的守护进程是个好主意吗?我应该注意什么?
- 外部消息队列实现的优势是什么?MultiTask 插件不使用外部消息队列。它使用 MySQL 表来存储任务。
- 我应该使用什么消息队列?滴管?豆茎?还有什么?
- 我应该如何实现后端处理器?分叉 PHP 守护进程是个好主意还是只是自找麻烦?
我目前的计划是使用 MultiTask 插件或编辑它以使用 beanstald 而不是它自己的 MySQL 表实现。队列中的作业可以简单地由一个任务名称和一组参数组成。PHP 守护进程将监视传入的作业并将它们传递给它的一个子线程。将简单地使用给定的参数执行 CakePHP 任务。
对此有任何意见、建议、评论、陷阱或火焰吗?