【问题标题】:Will setTimeout use Heroku free dyno hours?setTimeout 会使用 Heroku 免费的测功时间吗?
【发布时间】:2017-04-14 17:52:36
【问题描述】:

我有一个机器人,它的命令允许用户输入一条用破折号分隔的消息,然后输入一个指定的时间,然后将其传递给机器人,机器人在指定的时间后用消息提醒用户已经过去了。

function reminder(msg) {
    const message = msg.content.replace(this.prefix+this.name+" ","");
    const params = message.split("-");
    setTimeout(() => {
        msg.channel.sendMessage(params[0]);
    }, (parseInt(params[1])*1000));
}

我打算在 Heroku 上运行这个机器人,但由于我只是一个十几岁的孩子,这对我来说是一种爱好,我必须使用 Heroku 每个月给我的免费测功时间。如果有人使用机器人的这个功能,setTimeout 的计时机制会保持我的测功机启用并使用免费的测功机时间吗?

编辑:如果您认为 Heroku 有更好的免费替代品,您知道的任何人都会很棒 :)

【问题讨论】:

  • 是的,我相信。如果您还没有这样做,您可以使用 amazon aws 获得一年的免费服务器,也许它更适合您的应用

标签: javascript node.js heroku settimeout reminders


【解决方案1】:

是和不是。

假设 setTimeout 中的逻辑每隔不到 30 分钟 就会运行一次,所以 YES heroku 服务器仍处于唤醒状态,因此它将使用免费测功时间。

但是如果消息要在超过 30 分钟后发送,假设是一小时,那么如果在此期间没有任何请求访问您的服务器,您的服务器将在 30m 不活动后休眠,所以 NO 只要没有传入请求。

阅读更多关于 Heroku 免费测功时间的信息,here

【讨论】:

  • 如果实例开始休眠,setTimeout 将永远不会被执行。
  • 是的,你是对的,@DamienMATHIEU 为了避免这种情况并保持服务器 24/7 正常运行,请检查:stackoverflow.com/questions/40646858/…Damo
  • 所以现实情况是,除非我一直在运行机器人,否则提醒功能将不起作用?
  • 如果您在执行代码之前等待的时间(在 setTimeout 中)超过 30 分钟。
【解决方案2】:

你可以试试这个:http://neversleep.ml

它会监视您的服务器,并在它崩溃时发送通知电子邮件。

【讨论】:

  • 链接失效
猜你喜欢
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 2022-12-21
相关资源
最近更新 更多