当前,我有一个电报机器人计时器,该计时器可在我自己的终端上运行,但是部署到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是合适的解决方案...)