【发布时间】:2010-10-25 22:11:51
【问题描述】:
我在一个有点大的 Web 应用程序上工作,后端主要是 PHP。代码中有几个地方我需要完成一些任务,但我不想让用户等待结果。例如,在创建新帐户时,我需要向他们发送一封欢迎电子邮件。但是当他们点击“完成注册”按钮时,我不想让他们等到电子邮件实际发送后,我只想启动该过程,并立即向用户返回一条消息。
到目前为止,在某些地方我一直在使用 exec() 的感觉就像是 hack。基本上做这样的事情:
exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
这似乎可行,但我想知道是否有更好的方法。我正在考虑编写一个在 MySQL 表中对任务进行排队的系统,以及一个单独的长时间运行的 PHP 脚本,该脚本每秒查询一次该表,并执行它找到的任何新任务。如果需要的话,这还有一个好处,可以让我在未来将任务分配给几台工作机器。
我是在重新发明轮子吗?有没有比 exec() hack 或 MySQL 队列更好的解决方案?
【问题讨论】:
标签: php asynchronous background queue task