0

这是我的场景。在注册我的应用程序期间 - 我触发了一些长时间运行的 PHP 方法调用(例如,使用 OpenGraph API 获取 UserFriendLikes 等)。

我希望这些方法在用户没有注意到的情况下在后台运行 - 并让该方法在自己的时间完成。

实现它的最佳方法是什么?只是从用户注册页面调用 longRunningMethod() 是否有效 - 或者我需要做些什么来确保当用户导航到另一个页面等时它不会被终止?

4

2 回答 2

4

我会使用 shell exec 创建一个新进程。像这样的东西应该工作:

shell_exec("./scriptname.php > /dev/null 2>/dev/null &");

我相信它将启动一个新进程并继续在调用页面上执行,允许用户像往常一样继续。

于 2012-10-31T01:19:34.010 回答
3

上面 Tim S 的解决方案会起作用,但很难扩展。另一种方法是将工作请求放入队列中,由工作程序提取并处理。换句话说,注册页面可以直接放入队列中,然后用户可以自由导航到其他页面。

看看像RabbitMQ这样的工作队列 这是文档中描述它的一个词,看起来它将有助于解决您的问题:

工作队列(又名:任务队列)背后的主要思想是避免立即执行资源密集型任务而不得不等待它完成。相反,我们将任务安排在以后完成。

如果您不想自己设置 Rabbit MQ,可以尝试在Iron.io上注册工作人员。我认为它带有一个免费帐户。

于 2012-10-31T01:36:41.757 回答