[英]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.