我正在尝试使用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
作业。Worker 要做的是实例化 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
上面的命令将启动一个新的 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
...
使用自动装载机
使用 php autoloader 加载您的作业类。
采用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 与 phalcon 一起使用的教程。 http://www.mehuldoshi.in/background-jobs-phalcon-resque/