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函数并传入变量,而不会在程序执行后阻塞代码.
所以我正在寻找一个PHP程序或一个函数,它允许我执行脚本,传入几个变量,而不会阻塞Controller中的其余代码.
这正是Queues的用途.但是,开箱即用,Laravel中的队列将被同步调用,因此将阻止控制器中的其余代码.
这是因为设置队列需要一些第三方软件来运行,比如安装beanstalkd或使用iron.io.Laravel默认只是在创建队列时运行队列,因为它不能假设您提前设置了任何队列处理功能.
我不能100%确定你的业务目标是什么(能够在处理中间停止队列工作吗?),但我认为你缺少一些关于Queues在应用程序中的功能/方式的所需信息.
归档时间: |
|
查看次数: |
7407 次 |
最近记录: |