Laravel同时发射功能



我的特质中有这样的功能:

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

最巧妙的做法是创造"就业机会"。每个作业都表示要执行的功能。在这里,您的工作将是cupPlay

以下是从文档粘贴作业副本的基本示例:

<?php
namespace AppJobs;
use AppPodcast;
use AppAudioProcessor;
use IlluminateBusQueueable;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
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

它将执行您的任务。

根据您的需求,您可以执行任意数量的员工。。。

我希望这能有所帮助!

相关内容

  • 没有找到相关文章

最新更新