2017-10-24 2 views

답변

1

대부분의 경우 PHP는 "동기식"이므로 이론적으로 모든 기능에 대해 "동시 호출"을 할 수 없습니다.

그러나이 해결 방법은 일부 해결 방법이 있습니다.

PHP는 스크립트 언어입니다. 그래서 당신은 당신의 콘솔에서이 작업을 시작할 때 :

php -r "echo 'Hello World';" 

PHP를 과정이 시작되고,이 과정에서 일이 아무것도 동 기적으로 실행됩니다.

그래서 여기 해결책은 여러 기능을 동시에 실행할 수 있도록 다양한 PHP 프로세스를 시작하는 것입니다.

동시에 실행할 모든 기능을 넣은 SQL 테이블을 상상해보십시오. 그런 다음 실제로 "동시에"작동 할 수있는 10 개의 PHP 프로세스를 실행할 수 있습니다.

Laravel은이 문제에 대한 해결책을 제공합니다. @Anton Gildebrand가 주석에서 언급했듯이, "Queues"라고 불립니다.

당신은 여기에 문서를 찾을 수 있습니다 : 그 일의 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 

명령 줄에서 작업을 실행합니다.

그리고 당신이 원하는대로 당신이 당신의 필요에 따라, 많은 노동자를 실행할 수 있습니다 ...

난이 도움이되기를 바랍니다!