2011-04-11 58 views
3

基本上我正在用CodeIgniter设计一个PHP的警报系统。我希望通过插入数据库行来“预定”警报,然后定期分批发送。警报通过电子邮件发送出去。这是不好的设计,要求我的网站每分钟或两分钟运行一个cron脚本?

我认为实现这一目标的唯一方法是要求cron脚本每分钟调用仅限CLI的控制器,以便检查计划的警报并在发现任何事件时发送它们。

有些东西告诉我,经常运行cron脚本的设计很糟糕,但我想不出有任何其他方式来做到这一点。

建议?

+0

听起来没什么问题。 – 2011-04-11 21:18:04

+2

为什么不直接发送电子邮件?而不是插入一行以后发送,只需发送它! – jondavidjohn 2011-04-11 21:22:50

+0

问题 - >你不能每小时都安排一次吗?每分钟都会更新声音......另外,也许我没有得到你,但是不会有一个RSS提要完成同样的事情吗? – fingerman 2011-04-11 21:24:01

回答

1

好吧,现在这是你在做什么

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 

有什么东西触发你的数据库插入

因此,而不是插入,就打电话给你电子邮件程序

我错过了什么吗?

+1

正如他在上述评论中所说的,他的警报来自各方,只有一个是提交的表单。 – 2011-04-12 16:54:08

0

一个简单的解决方法是让插入脚本检查自上次批量发送以来是否有阈值数量的警报已排队。这不会是一项定时工作,但它意味着只有在任何时候消息的阈值数量都在等待。

但是,如果您确实需要定期完成此操作,并且您的网站不够忙,无法生成足够时间限制的警报,那么cron作业就是您唯一的实用选择。

2

使警报异步通过将警报任务与代码的其余部分分开是可取的。

我没有看到cron脚本的问题,我会问你为什么需要频繁地这么做? 设置阈值是一个好主意,但您仍然需要在每天结束时或每次检查以确保它已经发射。

你可以而不是使用控制器的全部开销(和框架的其余部分到那里) - 也许只是让一个轻量级的CLI PHP脚本

相关问题