setTimeouts не всегда работает на боте disord node.js - PullRequest
0 голосов
/ 06 ноября 2018

Я создал бот-диск, используя Node.js и фреймворк discord.js-commando.

Одной из функций является создание сценариев для записи, что по сути является таймером, поэтому вы можете сказать: Я хочу писать в течение 20 минут, начиная с 5 минут . Затем бот будет ждать 5 минут и запускать спринт, затем через 20 минут он уведомляет пользователей, делающих это, о том, что он завершен, и ожидает поступления словесных счетчиков, а затем публикует результаты.

Это работало нормально, когда бот был только на одном сервере, но было добавлено к нескольким совсем недавно (78 по команде !stats, хотя я не знаю, сколько активно его использует), и так как тогда это было очень странно.

Иногда спринт никогда не начинается, иногда он никогда не заканчивается, иногда он заканчивается, а затем после того, как вы публикуете свои WordCounts, он никогда не публикует окончательные результаты.

Это мой первый опыт работы с Node.js, так что я не знаю, делаю ли я что-то не так. Я делаю все таймеры с функцией setTimeout.

Вот командный файл: ссылка на GitHub

Например, это тайм-аут, который устанавливается после того, как пользователь отправил свою учетную запись, если теперь все отправили свою учетную запись, поэтому мы можем отобразить результаты:

msg.say('The word counts are in. Results coming up shortly...');
this.finished = 1;

// Clear original timeout
this.clear();

// Set new one
this.messageTimeout = setTimeout(function() {
  obj.finish(msg);
}, 10000);

Где clear:

clear() {
  clearTimeout(this.messageTimeout);
}

Есть ли что-то не так с этим? Я очень мало знаю о Node.js ... Должен ли я смотреть на cron каждую минуту вместо обработки спринтов? Или это может быть проблема с сервером? Я запускаю его на бесплатном сервере EC2 AWS, но все отчеты выглядят нормально, ресурсы на ненормально высоких уровнях не используются.

Спасибо.

...