使用Laravel在后台执行PHP脚本

Mar*_*ijn 0 php background worker laravel

我有一个使用Laravel 4编写的Web应用程序,当用户请求某个页面或单击按钮时,它会运行脚本.这应该在后台激活脚本.

目前,我的设置看起来像这样,

控制器部分:

public function getWorkerPage() {           

    Queue::push('UpdateUserVar1', array('id' => $login->id));

    Queue::push('UpdateUserVar2', array('id' => $login->id));

    Queue::push('Worker', array(
        'login_id' => $login->id
    ));

    .... // Some more stuff

    View::make('workerpage');
}
Run Code Online (Sandbox Code Playgroud)

工人:

class Worker {

    public function fire($job, $data) {
        ...
        //Process (Takes around 10 minutes)

        // Release the job which makes the worker work until it deletes itself by a piece of logic in the Process bit above.
        $job->release();
    }

}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,当多个用户请求运行此脚本时,需要10分钟才能完成上一个作业.我不希望这样.我希望这些脚本只在后台运行,直到用户停止它为止.当用户请求运行脚本时,它就会立即运行.

我想我需要拿走队列然后我的问题是,是否页面将继续加载加载,这不是我想要的东西,因为在那之后Queue::push,有一个正常的视图.所以我正在寻找一个PHP程序或一个函数,它允许我执行脚本,传入几个变量,而不会阻塞Controller中的其余代码.

我确实找到了像Gearman和Supervisord这样的解决方案,但我无法判断这些是否适合我,因为我没有完全掌握文档.

如果我的问题不完全清楚,请不要犹豫.

Nutshell:我需要一个在后台执行我的脚本的程序,这使我能够继续使用Laravels函数并传入变量,而不会在程序执行后阻塞代码.

fid*_*per 5

所以我正在寻找一个PHP程序或一个函数,它允许我执行脚本,传入几个变量,而不会阻塞Controller中的其余代码.

这正是Queues的用途.但是,开箱即用,Laravel中的队列将被同步调用,因此将阻止控制器中的其余代码.

这是因为设置队列需要一些第三方软件来运行,比如安装beanstalkd或使用iron.io.Laravel默认只是在创建队列时运行队列,因为它不能假设您提前设置了任何队列处理功能.

我不能100%确定你的业务目标是什么(能够在处理中间停止队列工作吗?),但我认为你缺少一些关于Queues在应用程序中的功能/方式的所需信息.