2017-10-24 12 views
0

私は私の特性にこのような機能を持っています。どのように私はすべてのカップを同時にプレイすることができますか?Laravel同時発射機能は

+0

Laravel Queuesをご覧ください。 –

答えて

1

ほとんどの場合、PHPは「同期」しているため、理論的にはどの関数にも「同時呼び出し」できません。

ただし、この作業を行うための回避策があります。

PHPはスクリプト言語です。つまり、あなたのコンソールでこれを起動したとき:

php -r "echo 'Hello World';" 

A 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 

を入力すると、タスクが実行されます。

そして、あなたが望むよう、あなたのニーズに応じて、できるだけ多くの労働者を実行することができます...

私はこのことができます願っています!

関連する問題