Сервер NodeJS с Mongo DB - одна функция будет генерировать отчет JSON-файла из БД, что может занять некоторое время (60 секунд - обработать сотни тысяч записей).Как выполнить/прервать выполнение длинных запусков в узле JS?
Мы хотим запустить это как фоновое задание. Нам нужно иметь возможность начать процесс сборки отчета, контролировать его и прервать его, если пользователь решит изменить параметры и восстановить его.
Каков самый простой подход с узлом? Не хотите попасть в сферы обработки отдельных рабочих серверов, очередей сообщений и т. Д. - нам нужно сохранить это в том же поле и довольно простой реализации.
1) Запустите сборку как метод асинхронизации и вернитесь к пользователю с помощью отчета о выпуске socket.io?
2) Выделите дочерний процесс для скрипта сборки?
3) Используйте что-то вроде https://www.npmjs.com/package/webworker-threads?
С несколькими подходами, на которые я смотрел, я застреваю в тех же двух областях;
1) Как отслеживать прогресс? 2) Как прервать существующий процесс сборки, если пользователь повторно передает данные?
Любые указатели больш были бы оценены ...
Спасибо за ответ @soyuka. С 'job' var - который привязывается к ссылке на дочерний элемент, поэтому вы можете остановить его, но работает ли он на PID? PID получить re использовали, не так ли? Итак, работа, которую мы создаем, может завершиться, и ее PID освободится для любого другого нового процесса? Что означает, что job.kill() может потенциально убить другой процесс, если он работает только с PID? Или это не работает так .... –
Просто проверьте документы, и он говорит ... «Может выпустить событие« ошибка », когда сигнал не может быть доставлен.Отправка сигнала дочернему процессу, который уже вышел, не является ошибкой, но может иметь непредвиденные последствия: если идентификатор PID (идентификатор процесса) был переназначен другому процессу, вместо этого сигнал будет доставлен в этот процесс. Что происходит дальше - кто-то догадывается ». Но обнуление ссылки на завершение должно решить это в соответствии с вашим exmaple! Извините, пропустил это. –
Этот код, кажется, разрешает только одно задание на отчет за раз и перезаписывает (и теряет следы предыдущее задание), если попытается запустить второй. – jfriend00