php 页面休眠,如何在后台休眠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队列,有什么方法可以解决此问题?

解决方法:

创造工作

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管理队列

欲了解更多信息,请参考this

标签:laravel-5,multithreading,sleep,php

来源: https://codeday.me/bug/20191026/1936429.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值