Я пытаюсь использовать php–resque для очереди и выполнять преобразования ffmpeg на моем сервере. Я широко понимаю, как это должно работать, но у меня возникают проблемы с деталями и я не могу найти никаких учебников. В частности, я не понимаю, где я должен размещать свои классы работы, и как давать классы моим работникам и начинать своих работников. В прочитанном мне сказано: «Приступая к выполнению своей заявки, вы также рассказываете работнику о своих классах работы с помощью автозагрузчика или включая их».
Надеюсь, кто-то может описать общую структуру использования php-resque.
Вы можете поместить свои классы работы там, где хотите. Это будет зависеть от вашей структуры приложения.
Например, предположим, что класс VideoConversion
используется для преобразования ffmpeg.
class VideoConversion { public function perform() { // The code for video conversion here } }
В вашем основном приложении перед использованием php-resque, допустим, у вас есть что-то подобное
public function uploadVideo() { // Upload and move the video to a temp folder // Convert the video }
И вы хотите вставить в очередь часть «конвертировать видео». Давайте просто поставим очередь в очередь convert
:
public function uploadVideo() { // Upload and move the video to a temp folder // Let's suppose you need to convert a 'source video' to a 'destination video' Resque::enqueue('convert', 'VideoConversion', array('origine-video.avi', 'destination-video.avi')); }
При очередности задания мы передали путь к исходному и целевому видео в класс VideoConversion. Вы можете передать другой аргумент, это будет зависеть от того, как написан ваш класс VideoConversion.
Затем рабочий VideoConversion
очередь convert
и выполнит задание VideoConversion
. То, что рабочий сделает, это создать экземпляр класса VideoConversion и выполнить метод perform()
.
Аргументы задания ( array('origine-video.avi', 'destination-video.avi')
), третий аргумент при очередности задания с помощью Resque::enqueue
, будут доступны внутри метода perform()
через $this->args
.
# VideoConversion.php class VideoConversion { public function perform() { // $this->args == array('origine-video.avi', 'destination-video.avi'); // Convert the video }
Класс VideoConversion
можно поместить в любом месте, но вы должны сообщить своим работникам, где его найти. Существует несколько способов сделать это
В вашем .htaccess или config apache добавьте каталог, содержащий все ваши классы заданий, в путь include. Ваши работники автоматически найдут их.
Основная проблема с этим методом заключается в том, что все ваши классы заданий должны находиться в одной папке и что все ваши классы заданий доступны повсюду.
При запуске работника используйте аргумент APP_INCLUDE
чтобы указать на автозагрузчик классов заданий.
APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php
Вышеупомянутая команда запустит нового рабочего, опросив очередь с именем convert
. Мы также передаем файл /path/to/autoloader.php рабочему. ( см. здесь, чтобы научиться начинать работника )
Технически рабочий будет включать этот файл с include '/path/to/autoloader.php';
,
Затем вы можете сообщить работникам, как найти свои классы работы:
Использовать основные
В '/path/to/autoloader.php':
include /path/to/VideoConversion.php include /path/to/anotherClass.php ...
Использовать автозагрузчик
Используйте автозагрузчик php для загрузки классов заданий.
Использовать set_include_path()
set_include_path('path/to/job');
Таким образом, ваши рабочие места находятся в include_path
только для этого рабочего.
APP_INCLUDE
к работнику, с которого вы начинаете. Если вы начинаете другого работника, снова используйте APP_INCLUDE
. Вы можете использовать другой файл для каждого рабочего.
Вы также можете создавать свои классы заданий для выполнения нескольких заданий. Есть учебник, объясняющий, как это сделать. Он охватывает от базовой системы очереди до того, как ее использовать и внедрять.
Если этого еще недостаточно, взгляните на документацию resque. API-интерфейс php-resque точно такой же. Единственное отличие состоит в том, что классы задания Resque написаны в Ruby, а php-resque – в php.
Привет, пожалуйста, ознакомьтесь с следующим руководством по использованию resque с phalcon. http://www.mehuldoshi.in/background-jobs-phalcon-resque/