由于30秒超时,PHP heroku计时器不起作用

时间:2019-01-01 09:23:16

标签: php heroku timer timeout

当前,我有一个电报机器人计时器,该计时器可在我自己的终端上运行,但是部署到heroku时,由于超过30秒而导致超时。希望找到能够解决这个问题的人。

我尝试将计时器设置为每次运行少于30秒,但这似乎是整个代码花费的时间的总和,这意味着我不能只将计时器设置为while循环并每29秒运行一次秒以防止超时。 Heroku:https://devcenter.heroku.com/articles/request-timeout

public function timer($time) {
echo "$time minutes countdown starts." . PHP_EOL;

// Save the date in future when the timer should stop
$endTime = time() + $time*60;
while(true) {
    sleep($time*20);
    $secondsRemaining = $endTime - time();
    // echo 'Minutes: '.ceil($secondsRemaining/60).PHP_EOL;

    if ($secondsRemaining <= 0) {
        echo 'Finished'.PHP_EOL;
        return true;
        }
    }
}

private function timedMessages($time, $msg) {
    if($this->timer($time)) {
        $this->sendMessage($msg);
                    // method to send telegram messages
    }
}

$msg = "Start";
$this->sendMessage($msg);

$msg = "1st message";
$this->timedMessages(20, $msg);

$msg = "2nd message";               
$this->timedMessages(20, $msg);

$msg = "3rd message";
$this->timedMessages(20, $msg);

预期:运行60分钟,每20分钟发送一条消息

结果:随着heroku超时,每30秒发送一次“开始”消息,然后重新运行代码。在20分钟后仍会发送“第一则消息”

如果可能的话,我希望我能找到一种使用heroku运行计时器的方法(我也不认为cronjobs是合适的解决方案...)

0 个答案:

没有答案