setTimeouts并不总是在node.js不和谐的bot上工作

时间:2018-11-05 21:59:30

标签: node.js discord.js commando

我使用Node.js和discord.js-commando框架创建了一个不和谐的机器人。

其中一项功能是创建冲刺(sprint sprint),本质上是一个计时器,所以你可以说:我想写20分钟,从5分钟开始。然后,该机器人会等待5分钟并开始冲刺,然后在20分钟后它会通知用户这样做已经结束,并等待字数输入,然后发布结果。

当bot仅在一台服务器上运行时,此方法工作正常,但最近又将其添加到其他服务器中(根据!stats命令,该数量为78,尽管我不知道有多少人正在积极使用它),从那以后,它变得非常不稳定。

有时候,冲刺永远不会开始,有时它永远不会结束,有时它会结束,然后在您发布字数统计后,它永远不会发布最终结果。

这是我第一次涉足Node.js,所以我不知道自己做错了什么。我正在使用setTimeout函数来处理所有计时器。

以下是命令文件:link to 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服务器上运行它,但是报告看起来都还不错,没有资源在异常高的级别上使用。

谢谢。

0 个答案:

没有答案