拉拉维尔广播和队列

3

我正在开发一个处理视频的应用程序。我尝试将10个视频推入队列中。在处理完一个视频后,我会触发如下事件:

...
$production->render();

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

我正在按照该视频的内容,向用户发送通知(https://laracasts.com/series/whats-new-in-laravel-5-1/episodes/12)

问题是:我想在每个视频处理完后推送通知,但实际上,在处理完十个视频之后才显示通知。
以下是我的脚本:
<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>

更新:

分发一个任务

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

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

        ....
    }

我的工作类:

公共函数处理(ProductionRepository $production) { ...


注:此文本已经是中文,因此无需翻译。
$production->render();

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

...

}

2个回答

4

在深入研究laravel 5.3核心后,我找到了解决方案。您的事件类需要扩展ShouldBroadcastNow接口:

use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;

class MyEvent implements ShouldBrodcastNow
{
...
}

如果您需要立即广播事件,那么这个方法就可以实现。

注意:不需要让 MyEvent 同时实现(ShouldBroadcastNow,ShouldBroadcast)这两个接口,因为接口 ShouldBroadcastNow 已经扩展了 ShouldBroadcast


这正是我想要的,因为我希望我的Pusher事件更加响应,因为它是从已经排队的后端作业中触发的。 - Throttlehead

0
如果您的10个视频都被处理为单独的队列作业,您只需要在每个队列作业中触发事件。以下是一个作业类的示例处理函数(请参见https://laravel.com/docs/5.2/queues#job-class-structure):
/**
 * Execute the job.
 */
public function handle()
{
    // Your video processing script

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

如果您的视频被处理为1个作业,您需要将事件添加到您可能正在使用以处理每个视频的任何循环内部:
foreach($videos as $video):
    // Your video processing script

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

我已经在每个排队的作业中触发了我的事件。但是当处理10个视频时,它仍然显示通知。我刚刚在我的帖子中添加了更多代码。 - user3118789
即使我将1个视频添加到队列中并且第一个视频正在处理时,我添加了1个更多的视频,它仍然不会推送单独的通知。当2个视频被处理时,2个通知会一起推送。 - user3118789
render() 方法是做什么的? - Steve O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接