PHP后台进程

时间:2011-03-25 18:35:28

标签: php apache

我有一个用户必须在我的网站上进行的过程,这可能需要相当长的时间(在某些情况下超过一个小时)。

我希望能够让用户启动该过程,然后被告知它在后台运行,他们可以离开页面并在过程完成时通过电子邮件发送。这有助于避免用户不耐烦并在流程结束前关闭窗口的情况。

理想情况下的一个示例是Mailchimp如何处理导入联系人。您上传了联系人的CSV文件,然后他们说联系人当前正在上传,但可能需要一段时间才能离开页面。

实现这一目标的最佳方法是什么?我查看了Gearman,但是看起来这个工具对于快速扩展大量任务非常有用,而不是在后台运行进程。

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

即使它看起来并不像你第一眼看到的那样,我想我会使用Gearman:

  • 您可以在用户执行操作时将任务推送到
  • 它将同时处理:
    • 将任务平衡到多个服务器(如果您有多个
    • 排队,因此不会并行执行X任务。
  • 无需重新发明轮子; - )

答案 1 :(得分:1)

您可能希望了解如何创建守护程序。我建议用PHP以外的语言编写守护进程(node.js可能?),但如果你已经在PHP中有一个大的(ish)代码库,这可能是不可取的。试着看看How to design a daemon with a MySQL DB connection

我一直在使用PHP中的库调用LooPHP来允许PHP的事件驱动编程(通常需要守护进程)。该库允许定时事件,多线程侦听器(当您希望一个事件队列从> 1类型的源提供时)。

如果您可以向我们提供有关此后台进程的确切内容的更多信息,则可能会有所帮助。

答案 2 :(得分:0)

使用用户ID作为文件名写出文件。产生一个新的进程来执行你想要它做的任何事情(如果你想要的是让它执行更多的PHP,那么你可以用你想运行的脚本调用PHP)。完成该过程后,请删除该文件。如果用户再次访问该页面,请让脚本检查文件是否存在(因为文件名是基于用户ID可预测的)。如果它存在,那么你仍在处理,所以告诉他们继续等待。也许有一些上限等待,如果他们回来并且文件存在,但是,比如5小时,删除文件让他们再试一次。

相关问题