Я создаю веб-сайт в CakePHP, который обрабатывает файлы, загруженные с помощью API XML-RPC и, хотя веб-интерфейс. Файлы должны быть проверены ClamAV, необходимо создать эскизы и т.д. Вся ресурсоемкая работа, требующая времени, для которого пользователю не нужно ждать. Итак, я изучаю асинхронную обработку с PHP в целом и CakePHP в частности.
Я наткнулся на плагин MultiTask для CakePHP, который выглядит многообещающим. Я также встретил различные реализации очереди сообщений, такие как dropr и beanstalkd. Конечно, мне также понадобится какой-то фоновый процесс, возможно, реализованный с использованием Cake Shell. Я видел MultiTask, используя PHP_Fork для реализации многопоточного PHP-демона.
Мне нужен совет о том, как наилучшим образом подобрать все эти штуки.
- Это хорошая идея иметь давнего демона, написанного на PHP? О чем я должен следить?
- В чем преимущество внешних реализаций очереди сообщений? Плагин MultiTask не использует внешнюю очередь сообщений. Он запускает его самостоятельно, используя таблицу MySQL для хранения задач.
- Какую очередь сообщений я должен использовать? dropr? beanstalkd? Что-то еще?
- Как мне реализовать серверный процессор? Является ли PHP-демоник forking хорошей идеей или просто просит проблемы?
Мой текущий план - либо использовать плагин MultiTask, либо отредактировать его, чтобы использовать beanstald вместо собственной реализации таблицы MySQL. Задания в очереди могут состоять только из имени задачи и массива параметров. Демон PHP будет следить за входящими заданиями и передавать их одному из дочерних потоков. Он просто выполнил бы задачу CakePHP с заданными параметрами.
Любое мнение, советы, комментарии, gotchas или пламя на этом?