我正在尝试使用php-resque在我的服务器上排队并执行ffmpeg转换。我广泛理解它应该如何工作,但我在细节方面有些麻烦,找不到任何教程。具体来说,我不明白我应该在哪里上课,以及如何将课程交给我的工人并开始我的工作。读我只说“让你的应用程序正在进行中还包括通过自动加载器或包括它们告诉工人你的工作类。”
希望有人可以概述使用php-resque的整体结构。
答案 0 :(得分:36)
您可以将工作班级放在所需的位置。这取决于您的应用程序结构。
例如,我们假设用于ffmpeg转换的类VideoConversion
。
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类的编写方式。
然后,工作人员将轮询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或apache配置中,将包含所有作业类的目录添加到包含路径。您的员工会自动找到他们。
此方法的主要问题是所有作业类必须位于同一文件夹中,并且所有作业类都可在任何位置使用。
启动worker时,使用APP_INCLUDE
参数指向作业类的“自动加载器”。
APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php
上面的命令将启动一个新的worker,轮询名为convert
的队列。
我们还将文件 /path/to/autoloader.php 传递给worker。 (see here to learn to start a worker)
从技术上讲,工作人员会将该文件包含include '/path/to/autoloader.php';
。
然后,您可以告诉工人如何找到您的工作类:
使用基本的
在'/path/to/autoloader.php'中:
include /path/to/VideoConversion.php
include /path/to/anotherClass.php
...
使用自动加载器
使用php autoloader加载你的工作类。
使用set_include_path()
set_include_path('path/to/job');
这样,你的工作就在这个工人的include_path
。
APP_INCLUDE
绑定到您正在开始的工作人员。如果您要启动其他工作人员,请再次使用APP_INCLUDE
。您可以为每个工作人员使用不同的文件。
您还可以设计作业类以执行多个作业。有tutorial解释如何做到这一点。它涵盖了从队列系统的基础到如何使用和实现它。
如果仍然不够,请查看resque文档。 php-resque API完全相同。唯一的区别是Resque作业类是用Ruby编写的,而php-resque是用PHP编写的。
答案 1 :(得分:1)
您好请查看以下教程,了解如何使用phalcon resque。 http://www.mehuldoshi.in/background-jobs-phalcon-resque/