Php Laravel - Как лучше всего создать al oop с опросом внешних серверов? - PullRequest
0 голосов
/ 06 августа 2020

Мне нужен ваш совет. Мне нужно сделать функцию, которая будет отправлять запросы на внешние серверы каждые несколько минут, какие IP-адреса будут получены из базы данных. Мои две идеи:

  1. каждые 5 минут, выберите все серверы из базы данных, а затем пропустите их все через один l oop, в котором я буду отправлять запросы на эти серверы, и я получу небольшой часть возвращаемых данных, которую я затем сохраню индивидуально в базе данных.
  2. Каждую минуту скрипт будет выбирать несколько сотен серверов, которые опрашивались более 5 минут a go (это будет записано в столбце в таблице с серверами) Какой способ лучше? Или, может быть, у вас есть собственные идеи? И в l oop мне нужно добавить данные для сохранения в базу данных или есть ли способ сохранить данные сразу после цикла?

Для начала у меня будет около 3000- 4000 записей. Со временем их будет все больше и больше. Я использую Laravel. Буду признателен за любые подсказки. Извините за мой английский sh.

1 Ответ

3 голосов
/ 06 августа 2020

Лучший способ сделать это - с очередями . Очереди 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
    }
    ...

Подробнее об очередях вы можете прочитать в официальной документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...