NodeJs, обрабатывать дату окончания голосов пользователей - PullRequest
0 голосов
/ 26 ноября 2018

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

Мне также нужна логика, которая автоматически удаляет голос, если срок его действия истек.До сих пор у меня возникла идея хранить даты истечения срока для голосов в базе данных (MongoDB), отсортированные по метке времени истечения срока.В NodeJ я всегда загружаю голосование с наименьшей датой истечения срока действия из базы данных.Затем я проверяю, сколько времени осталось, вычитая дату окончания голосования из текущей даты

Date.now() - voteTmp;

Затем я могу установить тайм-аут, который вызывает функцию для удаления голоса и автоматически запускает новый тайм-аут дляследующий голос.Является ли проблемой установить тайм-аут с таким большим количеством секунд?

У вас есть идеи получше?Спасибо:)

1 Ответ

0 голосов
/ 26 ноября 2018

Объясняется цикл событий здесь :

simplified overview of the event loop's order of operations

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


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

Однако в вашем сценарии есть вероятность, что вы можете случайно зарегистрировать избыточные или недействительные таймеры (возможно, после восстановления после сбоя). MongoDB поддерживает (автоматический) срок действия данных .Вы можете указать MongoDB удалить документы по истечении заданного количества секунд.Это кажется достаточно близко к тому, что вы хотите сделать.

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