簡體   English   中英

Laravel同時啟動功能

[英]Laravel simultaneous launch functions

我的特質具有以下功能:

public function cupPlayMatch(Season $season, $round_id)
{

    foreach($season->cups as $cup)
    {
        $this->cupPlay($cup, $round_id);
    }

}

第一個杯子結束后,第二個杯子開始比賽。 如何開始同時玩所有杯子?

在大多數情況下,PHP是“同步的”,這意味着從理論上講您不能對任何函數進行“同時調用”。

但是,存在一些變通辦法可以使此工作。

PHP是一種腳本語言。 因此,當您在控制台中啟動它時:

php -r "echo 'Hello World';"

將啟動一個PHP 進程 ,並且該進程中發生的任何事情都將同步執行。

因此,這里的解決方案是啟動各種PHP進程,以便能夠同時運行功能。

想象一下一個SQL表,在其中放置了要同時執行的所有功能。 然后,您可以運行10個實際上“同時”運行的php進程。

Laravel提供了開箱即用的解決方案。 正如@Anton Gildebrand在評論中提到的那樣,它稱為“隊列”。

您可以在這里找到文檔: https : //laravel.com/docs/5.5/queues

laravel的做法是創造“工作”。 每個作業代表您要執行的功能。 在這里,您的工作將是cupPlay

這是從文檔粘貼的作業副本的基本示例:

<?php

namespace App\Jobs;

use App\Podcast;
use App\AudioProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;

class ProcessPodcast implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $podcast;

    /**
     * Create a new job instance.
     *
     * @param  Podcast  $podcast
     * @return void
     */
    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }

    /**
     * Execute the job.
     *
     * @param  AudioProcessor  $processor
     * @return void
     */
    public function handle(AudioProcessor $processor)
    {
        // Process uploaded podcast...
    }
}

將工作驅動程序配置為運行隊列后,只需啟動:

php artisan queue:work --queue=high,default

從命令行開始,它將執行您的任務。

您可以根據需要執行任意數量的工作人員...

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM