我正在尝试使用php-resque在我的服务器上排队并执行ffmpeg转换.我广泛理解它应该如何工作,但我在细节方面有些麻烦,找不到任何教程.具体来说,我不明白我应该把工作班放在哪里,以及如何将课程交给我的工人并开始工作.我读到的只是说"让你的应用程序正在进行中还包括通过自动加载器或包括它们告诉工人你的工作类."
希望有人可以概述使用php-resque的整体结构.
Wa0*_*x6e 36
你可以把你的工作班放在你想要的地方.这取决于您的应用程序结构.
例如,假设该类VideoConversion
用于ffmpeg转换.
class VideoConversion {
public function perform() {
// The code for video conversion here
}
}
Run Code Online (Sandbox Code Playgroud)
在你的主应用程序中,在使用php-resque之前,假设你有类似的东西
public function uploadVideo() {
// Upload and move the video to a temp folder
// Convert the video
}
Run Code Online (Sandbox Code Playgroud)
而你想要将"转换视频"部分排入队列.让我们将它排队到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'));
}
Run Code Online (Sandbox Code Playgroud)
排队作业时,我们将源视频和目标视频的路径传递给VideoConversion类.您可以传递其他参数,它取决于您的VideoConversion类的编写方式.
然后convert
,工作人员将轮询队列,并执行该VideoConversion
作业.工作人员将做的是实例化VideoConversion类,并执行该perform()
方法.
作业argument(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
}
Run Code Online (Sandbox Code Playgroud)
该VideoConversion
班可随处放置,但是你必须告诉你的员工在哪里可以找到它.有多种方法可以做到这一点
在.htaccess或apache配置中,将包含所有作业类的目录添加到包含路径.您的员工会自动找到他们.
此方法的主要问题是所有作业类必须位于同一文件夹中,并且所有作业类都可在任何位置使用.
启动worker时,使用APP_INCLUDE
参数指向作业类的"autoloader".
APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php
Run Code Online (Sandbox Code Playgroud)
上面的命令将启动一个新的worker,轮询名为的队列convert
.我们还将文件/path/to/autoloader.php传递给worker.(见这里学习创办工人)
从技术上讲,工作人员将包含该文件include '/path/to/autoloader.php';
.
然后,您可以告诉工人如何找到您的工作类:
使用基本包含
在'/path/to/autoloader.php'中:
include /path/to/VideoConversion.php
include /path/to/anotherClass.php
...
Run Code Online (Sandbox Code Playgroud)
使用自动加载器
使用php autoloader加载你的工作类.
使用 set_include_path()
set_include_path('path/to/job');
Run Code Online (Sandbox Code Playgroud)
这样,你的工作就属于include_path
这个工人.
APP_INCLUDE
被绑定到你正在开始的工人.如果您正在启动另一名工作人员,请APP_INCLUDE
再次使用.您可以为每个工作人员使用不同的文件.
您还可以设计工作类以执行多个作业.有一个教程解释如何做到这一点.它涵盖了从队列系统的基础到如何使用和实现它.
如果仍然不够,请查看resque文档.php-resque API完全相同.唯一的区别是Resque工作类是用Ruby编写的,而php-resque是用PHP编写的.