我有一个使用 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');
}
工人:
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();
}
}
现在,我的整个问题是,当多个用户请求运行此脚本时,前一个作业需要 10 分钟才能完成。我不想要那个。我希望这些脚本只在后台运行,直到用户停止它。当用户请求运行脚本时,它会立即运行。
我想我需要带走队列,但我的问题是,页面将继续加载加载,这也不是我想要的,因为在Queue::push
's 之后,有一个正常的视图。所以我正在寻找一个 PHP 程序或一个函数,它可以让我执行脚本,传递几个变量,并且不会阻塞 Controller 中的其余代码。
我确实找到了一些解决方案,例如 Gearman 和 Supervisord,但我无法真正判断这些是否适合我,因为我没有完全掌握文档。
如果我的问题不完全清楚,请随时提问。
简而言之:我需要一个在后台执行我的脚本的程序,使我能够继续使用 Laravel 函数并传入变量,而不会在程序执行后阻塞代码。