Есть 7 файлов (для заполнения 7 разных полей, 6 файлов имеют одинаковое кол-во строк, предположим 1000, и 1 файл "сам по себе").
По сути - генерация постов. 1000 заголовков на 1 контент (берем грубо). Нужно их итеративно отправлять на указанный адрес постом (с этим проблем нет).
Если все данные отправить на сервер и там заниматься обработкой - сервер будет долго думать, таймауты и прочие нехорошие вещи.
Думал "разгрузить" сделав итеративность на клиенте (цикл с аяксом внутри), а"сборку" данных и отправку на сервере. Но тогда падает браузер из-за нехватки памяти.
Как лучше поступит? Крон не вариант. Может стоит рассмотреть очереди (краем уха про них слышал в ларавел, но еще не дошел до них)? Или есть более простые решения?
Не прошу решать за меня, просто натолкните на путь истинный
1. Разобраться с памятью. Не должно падать если запускаете не на калькуляторе. Задача простая по виду, нечему падать.
2. По крону сделать. (нет проблем с таймаутом)
3. Хостера поменять.
Михаил Шпаков:
По крону всяко быстрее.
Крон может раз в минуту файл-флаг проверять и запускать процесс:
Скинули файлы на сервак, положили куда то в папочку.
Создали файлик о том что нужно отработать.
Крон проверил его и пошел работу работать.
Очереди как раз самое то. Дополнительно создаете табличку, например, file_handlings, в которую будете писать текущий процесс обработки файла с примерно такой структурой id, total_rows, completed_rows. И процесс будет выглядеть примерно так:
1. загружаете файл на сервер
2. создаете запись в таблице file_handlings
3. возвращаете клиенту id из таблицы file_handlings
4. запускаете job на сервере, в job передаете id из таблицы file_handlings
5. в job'е обрабатываете файл и записываем в таблицу file_handlings по id текущий процесс обработки
6. с клиента ajax'ом время от времени дергаете сервер и получаете по id из таблицы file_handlings сколько строк обработалось
......
N. Все строки файла обработались, дальше делайте что вам нужно ;)
Есть ли русскоязычные нормальные туториалы насчет очередей? Потому что не могу в основах разобраться. Через консоль создал этот обработчик очереди, в нем 2 свойства и 2 метода, конструктор и обработчик. Как я понимаю, это обычный контроллер который будет дергаться слушателем очередей, верно? Тогда как его добавить в очередь (все примеры что находил использовали мейл и то хз как)
Михаил Шпаков: На счет туториала не подскажу, а вот доку можете почитать тут https://laravel.ru/docs/v5/queues
Смысл работы такой: на сервере запускается отдельный php процесс командой php artisan queue:work. Дальше вы в своем контроллере добавляете задачу в очередь командой $this->dispatch(new КласЗадачи). После чего запущенный ранее процесс подхватывает эту задачу(выполняет метод handle) и начинает обрабатывать в своем потоке.