Здравствуйте!
Интересуют следующие аспекты работы с Gearman в PHP:
— чем концептуально отличается GearmanJob от GearmanTask и какой из них следует использовать для оформления отложенного задания?
— везде в интернете описывается режим работы, когда и воркер, и клиент — демоны. Можно ли демоном сделать только воркера, а клиентскую часть, которая будет помещать задания в Gearman — оформить в коде, вызываемом по HTTP. Чтобы, скажем, обратился я к странице, которая отображает результат длительной операции, в коде формирования страницы ставится задание, а пользователю отдается «Try later». Пользователь жмет F5, вновь запущенный код, что задание уже поставлено и имеет определенный статус выполнения, и возвращает его, или — если задание выполнено — отобразит его результат?
— этот вопрос вытекает из предыдущего: понятно дело, когда клиент — демон, он поставил задание и просто ждет результата, или регулярно опрашивает Gearman на предмет результата, имея handle поставленного задания. В документации
php.net/manual/ru/book.gearman.php я не нашел способа, как вновь запущенному скрипту. имея ID задачи, который самому можно задавать. спросить у сервера о ее статусе. handle имеет текстовый вид («H:CompName:4», H:CompName:5, ..), но тут едва ли подойдет так как их нумерация начинается сначала после падения/перезапуска Gearman, Опытным путем я выяснил, что повторный запуск doBackground с теми же параметрами, что и в прошлый раз. вернут тот же handle, НО это если только задача еще в процессе выполнения. Когда задача выполнена, повторный ее запуск будет воспринят как совершенно новая задача. Городить стороннее хранилище, в которое клиент будет помещать задачи (помимо того что он их Gearman'у отдает). а воркер рапортовать о результатах выполнения?
Пользуясь случаем, хочу еще узнать: если вы имели дело с этой темой, какое из решений вы выбрали для организации выполнения отложенных задач? Я в настоящее время выбираю между RabbitMQ, Gearman и php-resque.