基本上我正在设计一个警报系统在PHP与CodeIgniter。我希望通过插入数据库行来"安排"警报,然后定期分批发送。警报通过电子邮件发送。
我能想到的实现这一目标的唯一方法是要求cron脚本每分钟调用一个仅限cli的控制器,检查计划的警报并在发现任何情况时发送它们。
有些事告诉我,让一个cron脚本如此频繁地运行是糟糕的设计,但我想不出任何其他方法来做。
建议吗?
使警报异步通过将警报任务与其他代码分开是可取的。
我不认为cron脚本有什么问题,我想问为什么你需要经常这样做?设置一个阈值是一个好主意,但你仍然需要在一天结束或任何时候检查,以确保它已经触发。
你可以使用整个控制器的开销(和框架的其余部分)-也许只是做一个轻量级的CLI php脚本
好的,这就是你目前正在做的
Timed Cron Job
|
|-check for any new updates (in database)
|
|-Send them
Some Event happens to trigger alert
|
|-Store alert to send later in database
直接写
Some Event happens to trigger alert
|
|-Send it
触发数据库插入
所以不要插入,直接调用你的邮件例程。
我错过了什么吗?
一个简单的解决方法是让插入脚本检查自上次批量发送以来是否有阈值数量的警报排队。这不是一个定时作业,但这意味着任何时候等待的消息都不超过阈值#。
但是,如果您确实需要定期完成它,并且您的站点不够繁忙,无法生成足够的警报,通常会在时间限制内完成,那么cron作业是您唯一实际的选择。