2016-03-30 23 views
2

Videoları işlemek için bir uygulama geliştiriyorum. 10 videoyu bir sıraya zorlamaya çalışıyorum.Laravel Yayın ve Kuyrukları

... 
$production->render(); 

event(new VideoHasProcessed(basename($this->video->path))); 
... 

Ve kullanıcılar (https://laracasts.com/series/whats-new-in-laravel-5-1/episodes/12)

sorun bir bildirim itmek Bu videoyu aşağıdakileri yapın edilir: Ben, her bir bildirim itmek istiyor video işlendi sonra böyle bir olay geçti video işlendi, ancak 10 video işlendikten sonra bildirim görüntülendi.

<script> 
    (function() { 
     var pusher = new Pusher(PUSHER_ID, { 
      encrypted: true 
     }); 

     var channel = pusher.subscribe('test'); 

     channel.bind('App\\Events\\VideoHasProcessed', function(data) { 
      console.log(data); 
     }); 
    })(); 
</script> 

Güncelleme:

Sevk iş

foreach ($request->input('files') as $file) 
    { 
     ... 

     // Dispatch a job. 
     $this->dispatch(new ProduceVideo($video)); 

     .... 
    } 

Ve işim sınıfı:

kamu fonksiyon kolu (ProductionRepository $ üretimi

Bu

benim senaryom) { ...

$production->render(); 

event(new VideoHasProcessed(basename($this->video->path))); 

... 

}

cevap

0

senin 10 videoya her her daki olayı açmanız yeterli olacaktır ayrı sıraya işler olarak işlenirse işi sıraya. İşte iş sınıfı için bir örnek tanıtıcı fonksiyonu (https://laravel.com/docs/5.2/queues#job-class-structure bakınız) var:

/** 
* Execute the job. 
*/ 
public function handle() 
{ 
    // Your video processing script 

    // Fire your event 
    event(new VideoHasProcessed(basename($this->video->path))); 
} 

videolarınızı size her videoyu işlemek için kullanabilecek tüm döngü içinde takvimine eklemek gerekir 1 iş olarak işlenirse:

foreach($videos as $video): 
    // Your video processing script 

    // Fire your event 
    event(new VideoHasProcessed(basename($this->video->path))); 
endforeach; 
+0

zaten işi sıraya uzanır, çünkü her iki arayüzleri (ShouldBroadcastNow, ShouldBroadcast) uygulamak MyEvent için ihtiyaç yoktur. Ancak, 10 video işlendiğinde bildirim görüntülenir. Gönderiye daha fazla kod ekledim. – user3118789

+0

Sıraya 1 video eklediğimde ve ilk video işlendiğimde bile 1 video daha ekledim, hala ayrı bir bildirim göndermiyor. 2 video işlendiğinde 2 bildirim birlikte itilir. – user3118789

+0

lütfen bana yardım edin! Teşekkür ederim. – user3118789

3

Lavaboda kazıldıktan sonra 5.3 çekirdek Çözümü buldum. Eğer bu hile yapmak gerekir hemen yayınlanacak olay gerekiyorsa o şekilde

use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow; 

class MyEvent implements ShouldBrodcastNow 
{ 
... 
} 

: You olay sınıfı ShouldBrodcastNow arabirimini uzatmak gerekiyor.

NOT: arayüz ShouldBroadcastNow zaten ShouldBroadcast

Ben her zaman olayı tetikleninceye
+0

Daha önce sıraya alınmış bir arka uç işinden kovulduğu için benim itici olayımın çok daha duyarlı olmasını istediğim için aradığım şey buydu. – Throttlehead