问候,我正在开发一个Web应用程序。其中一部分将允许用户安排在特定时间发送“提醒”电子邮件给他们。有什么最好的方法来实现这一点?基本上,我想要的是“中断”模式,而不是“轮询”模式。
以下是我想出的一些可能的解决方案:
1. 每分钟触发一个cronjob。触发脚本会检查数据库是否有需要发送的电子邮件,如果有,则发送它们,否则就休眠。缺点是每分钟都会产生一些开销。并且,当用户数量变得非常大时,可能需要超过一分钟才能发送所有电子邮件,因此这可能不是可扩展的系统。
2. 与第1种相同,但只在每15分钟触发一次任务。这更加可管理,但仍然有一些开销,尤其是当没有需要发送的电子邮件时。虽然不错,但也不完美。
3. 在PHP中使用exec()执行一些代码,动态更改crontab或在底层Linux中安排“at”作业。这将为我提供所需的灵活性和“中断”类型模型,但将在允许PHP执行Linux代码时打开巨大的安全漏洞。因此,我将放弃这个选项。
那么,有比我想出的更好的方法吗?也许有一种不使用cron来安排电子邮件的方法?我非常想知道您对此有何看法 :)。
以下是我想出的一些可能的解决方案:
1. 每分钟触发一个cronjob。触发脚本会检查数据库是否有需要发送的电子邮件,如果有,则发送它们,否则就休眠。缺点是每分钟都会产生一些开销。并且,当用户数量变得非常大时,可能需要超过一分钟才能发送所有电子邮件,因此这可能不是可扩展的系统。
2. 与第1种相同,但只在每15分钟触发一次任务。这更加可管理,但仍然有一些开销,尤其是当没有需要发送的电子邮件时。虽然不错,但也不完美。
3. 在PHP中使用exec()执行一些代码,动态更改crontab或在底层Linux中安排“at”作业。这将为我提供所需的灵活性和“中断”类型模型,但将在允许PHP执行Linux代码时打开巨大的安全漏洞。因此,我将放弃这个选项。
那么,有比我想出的更好的方法吗?也许有一种不使用cron来安排电子邮件的方法?我非常想知道您对此有何看法 :)。
exec
是没有问题的。与其它代码中注释努力不懈相比,由于 PHP 缓冲区溢出,利用更有可能发生。 - mario