Несколько setTimeouts на Nodejs - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь реализовать функцию автоматического отмены заказа в моем приложении. Так что я думаю о добавлении setTimeouts на Node, который отменит заказ пользователя в данный момент времени.

Я попытался добавить таймер в приложение, но слишком много ограничений.

Замедлит ли несколько setTimeouts производительность нашего сервера?

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Использовать повестку дня вместо setTimeouts.

Повестка дня использует базу данных MongoDB для сохранения запланированных задач (и параметров, необходимых для задачи), так что даже если сервер выйдет из строя, задачи будут по-прежнему выполняться в указанное время или интервалы.

Рекомендации:

https://thecodebarbarian.com/node.js-task-scheduling-with-agenda-and-mongodb

https://medium.com/hacktive-devs/nodejs-scheduling-tasks-agenda-js-4b6824f9457e

1 голос
/ 25 июня 2019

Замедлит ли несколько setTimeouts производительность нашего сервера?

Нет, это не замедлит его больше, чем время процессора, используемое при каждом таймере.

Конструкция таймера в node.js специально разработана для правильного управления большим количеством таймеров. Не должно быть проблем с наличием большого количества таймеров (десятки тысяч будут в порядке). Есть отсортированный список таймеров, и он использует только фактический таймер уровня ОС или «следующее» событие таймера для запуска. Когда это срабатывает, он захватывает следующее событие в списке и устанавливает для него таймер уровня ОС. Когда создается новый таймер, он вставляется в отсортированный список, и если он не является первым таймером в списке, он просто будет ждать своей очереди, пока не станет первым в списке.

Тем не менее, вам может не потребоваться отдельный таймер для каждого заказа. Поскольку вам не нужна точность на уровне миллисекунд или даже минут, вы можете вести список незавершенных заказов с отметкой времени их последнего изменения, а затем у вас может быть один интервальный таймер, который запускается каждые несколько минут и который просто проверяет, какие заказы имеют превысил ваше неактивное время и должен быть отменен. Если список заказов был отсортирован по его отметке времени, вы просто проверите несколько заказов с конца, пока не найдете те, которые больше не нужно отменять.

...