大佬教程收集整理的这篇文章主要介绍了如何在后台休眠PHP(Laravel 5.2),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个artisan命令,希望在调用方法后立即运行.但是命令包含一个sleep();命令.我想在后台运行该artisan命令,因为该方法需要立即向用户返回响应.我的示例代码如下:
在路由文件中
Route::get('test', function(){
Artisan::queue('close:bidding', ['applicationId' => 1]);
return 'called close:bidding';
});
in close:出价命令
public function handle()
{
$appId = $this->argument('applicationId');
//following code line is making the problem
sleep(1000 * 10);
//close bidding after certain close time
try{
Application::where('id', $appId)->update(['live_bidding_status' => 'closed']);
}catch (\PDOException $E){
$this->info($e->getmessage());//test purpose
}
$this->info($appId.": bid closed after 10 seconds of creation");
}
问题
当我点击/ test url时,加载浏览器10秒钟后将显示名为close:bidding的返回字符串,因为该命令内部有一个sleep(10 * 1000).
我想要的是
我想在后台运行命令.我的意思是,当我点击/ test网址时,它应该立即显示调用的close:bidding,但是close:bidding命令将在后台运行. 10秒钟后,它会更新应用程序,尽管前端用户不会注意到任何有关它的信息.
部分问题
>它与多线程相关吗?
>使用PHP无法解决吗,我应该换个角度吗?
>即使使用Laravel队列,有什么方法可以解决此问题?
解决方法:
创造工作
<?PHP
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\serializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class JobTest implements ShouldQueue
{
usE interactsWithQueue, Queueable, serializesModels;
private $payload = [];
public function __construct($payload)
{
$this->payload = $payload;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$appId = $this->payload('applicationId');
//following code line is making the problem
sleep(1000 * 10);
}
}
推送作业后台队列
Route::get('test', function(){
dispatch((new JobTest)->onQueue('queue_name'));
return 'called close:bidding';
});
在这种状态下,我们有工作,您将工作转移到队列中.但尚未处理.我们需要队列侦听器或工作者在后台处理这些作业
PHP artisan queue:listen --queue=queue_name --timeout=0
OR
PHP artisan queue:work --queue=queue_name --timeout=0 //this will run forever
注意:
也许您可以尝试使用supervised,beanstakd管理队列
以上是大佬教程为你收集整理的如何在后台休眠PHP(Laravel 5.2)全部内容,希望文章能够帮你解决如何在后台休眠PHP(Laravel 5.2)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。