1

我正在开发一个提醒类型的网站,您可以在其中设置要发送给自己的提醒,设置提醒的时间,当时间到时,您会收到一封电子邮件。

但是,提醒并不重要,大约 5-10 分钟的延迟是可以接受的。

我有两个选择:

1) 每分钟运行一个 cron 脚本。该脚本将检查数据库中是否有为 CURTIME() 安排的任何事件,(即,如果 cron 在 5:35:30 运行,它将检查在 5:35:00 设置的任何提醒)。如果没有找到,终止。如果找到,请发送电子邮件。

2) 或者,我可以每 10 分钟运行一次 Cron 脚本。此脚本将检查从现在到 10 分钟之前是否有任何提醒。例如,如果 cron 在 5:35:30 运行,它将检查 5:25:00 到 5:35:00 之间的任何提醒。如果找到,发送它们,如果没有,终止。

第二种方法的唯一问题是,如果这不会导致一些提醒无法发送出去,我不肯定。

例如,如果服务器负载较高,而计划在 5:35:00 运行的 Cron 而在 5:37:00 运行会怎样。然后可能会错过任何预定在 5:35:00 发送的电子邮件。

我应该使用哪种方法?

4

2 回答 2

1

在 Windows 和 Unix 机器上,有at,用于在指定时间安排一次性作业。除非您发送如此多的电子邮件以至于每分钟检查/发送更有意义,否则简单地让“保存我的提醒”代码安排通过at作业发送可能会更容易。

于 2012-09-16T02:05:43.643 回答
1

它们是相同的选项,只是周期不同。

您可能会认为这是一个间隔轮询或队列扫描,但“非实时”,因此您必须针对延迟进行设计。

一般来说,每次扫描都应该假设它可能已经延迟,并且系统应该有一些定义的策略来处理“太旧”的排队通知。(如果系统在扫描新入队的通知之前关闭了一个小时怎么办?)

为了稳健性,确保队列处理是原子的或同步的——无论是来自并发扫描还是后续扫描,都不会对项目进行双重处理。

于 2012-09-16T02:05:51.207 回答