我的php项目中有一些后台任务。如果某些条件满足,它应该做一些工作。例如:如果有一些订单尚未交付,剩余时间估计交货时间少于15分钟,系统会向快递员发送通知,告知他可能已经晚了。
最简单的解决方案 - 创建每分钟运行php脚本的cron任务。该脚本将检查该条件并在条件满足时发送通知。
另一种方法是队列。我看着gearman和rabbitmq,但是我可以看到它们是另一个用例。如果您有一些直接发送任务的客户端,它们就适合。在我的情况下,我没有任何客户端,它只是系统中的一些条件。
我想到的最后一个解决方案是使用无限循环编写自定义php-daemon。在每次迭代中,它检查条件,如果满意则完成工作并休眠1分钟。但是内存泄漏,守护进程重启等可能存在问题。
那么,现代php中这个问题的最佳解决方案是什么?
答案 0 :(得分:0)
如果cron可以为你完成这项工作,那么一定要使用它。当有经过验证的工具可以完成工作时,为什么要重新发明轮子?我写了一些
while (1) {
// run forever scripts
}
他们跑了几个月没有错;他们处理的消息队列是简单的mysql表。但是,如果你这样做,你将需要一个cron作业来检查while (1)
进程状态,你需要一些锁定来防止进程多次启动,等等。只需使用cron。
答案 1 :(得分:0)
如果你不喜欢使用cronjob,我猜你最好的选择就是写一个守护进程。我喜欢在Perl中编码,如果我是你,我会在Perl中编写一个守护进程。
但是,如果我在PHP中编写守护进程,我会在cronjob中运行另一个备份脚本(例如10分钟间隔),这将检查我的php守护程序是否正在运行,如果没有运行则重启守护进程。
答案 2 :(得分:-1)