22

我正在尝试使用php-resque在我的服务器上排队和执行 ffmpeg 转换。我大致了解它应该如何工作,但是我在细节方面遇到了一些麻烦,并且找不到任何教程。具体来说,我不明白我应该把我的工作课程放在哪里,以及如何给我的工人上课并开始我的工人。读我只说“让你的应用程序进行中还包括告诉工人你的工作类别,通过自动加载器或包括它们。”

希望有人可以概述使用 php-resque 的整体结构。

4

2 回答 2

37

你可以把你的工作课程放在你想要的地方。这取决于您的应用程序结构。

如何创建工作类别

例如,假设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类可以放在任何地方,但你必须告诉你的员工在哪里可以找到它。有多种方法可以做到这一点

把你的工作类放在 include_path

在您的 .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 编写的。

于 2012-10-22T03:49:53.503 回答
1

嗨,请查看以下关于如何将 resque 与 phalcon 一起使用的教程。 http://www.mehuldoshi.in/background-jobs-phalcon-resque/

于 2015-05-05T07:41:06.570 回答