我试图使用PHP-resque排队,我的服务器上执行的ffmpeg转换。 我大致明白它应该如何工作,但我有一些麻烦的详细资料,并没有发现任何教程。 具体地讲,我不明白,我应该把我的作业类,以及如何给类我的工人,开始了我的工人。 该读我只是说“让您的应用程序正在进行中还包括告诉工人的作业类,方法是自动加载磁带机或包括它们的方法。”
希望有人可以勾勒出使用PHP-resque的整体结构。
我试图使用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类是如何写的。
然后工人将轮询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的配置,添加包含所有作业类的包括路径中。 你的员工会自动找到它们。
使用这种方法的主要问题是,你的所有作业类必须放在同一个文件夹,你的所有工作类是随处可见。
当启动工人,使用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文档。 PHP-resque API是完全一样的。 唯一的区别是Resque作业类是用Ruby编写的,而PHP-resque的一个是在PHP。
你好请查看以下有关如何使用resque与尔康教程。 http://www.mehuldoshi.in/background-jobs-phalcon-resque/