PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在后台休眠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管理队列

欲了解更多信息,请参this

大佬总结

以上是大佬教程为你收集整理的如何在后台休眠PHP(Laravel 5.2)全部内容,希望文章能够帮你解决如何在后台休眠PHP(Laravel 5.2)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: