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