Лучший способ сделать это - с очередями . Очереди Laravel предоставляют единый API для множества различных серверных частей очередей, таких как Beanstalk, Amazon SQS, Redis или даже реляционная база данных. Очереди позволяют отложить обработку трудоемкой задачи, такой как отправка электронного письма, на более позднее время. Отсрочка этих трудоемких задач значительно ускоряет веб-запросы к вашему приложению.
В конструкторе заданий вы можете передать IP-адрес сервера, на котором вы хотите извлечь данные, и это сделает logi c внутри работа. Без необходимости в l oop, задания будут выполняться одно за другим или столько, сколько вы будете sh, которые будут выполняться одновременно. Я проделывал это около 5 раз и, на мой взгляд, Laravel предоставляет чрезвычайно мощный инструмент .
Быстрый пример:
foreach($ips as $ip) {
\App\Jobs\ExtractInfoFromServer::dispatch($ip);
}
И в вашем Job
<?php
namespace App\Jobs;
class ExtractInfoFromServer implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $ip;
/**
* Create a new job instance.
*
* @param string $ip
* @return void
*/
public function __construct(string $ip)
{
$this->ip = $ip;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Send the request to server ip
}
...
Подробнее об очередях вы можете прочитать в официальной документации .