Pagodabox或PHPfog + Gearman

时间:2012-10-24 16:06:20

标签: background-process gearman paas phpfog

全部,

我正在寻找通过这两种服务中的任何一种来做一些工作背景的好方法。

我看到PHPFog支持IronWorks,但我需要更实时的东西。通过这些基于云的PaaS服务,我无法使用popen(background.php --token=1234)。因此,我正在考虑最好的解决方案,可能是尝试启动一名齿轮工人来处理这项工作。 (实际上我的首选方法是使用websockets来保持连接打开并从作业接收反馈,而不是通过AJAX长时间轮询db表,但这些人都不支持websockets)

问题1是,有没有比使用gearman卸载工作更好的解决方案?

问题2是,http://help.pagodabox.com/customer/portal/articles/430779我看到pagodabox支持'工人听众'......有没有人用齿轮手设置这个?会有用吗?

由于

1 个答案:

答案 0 :(得分:2)

我正在使用PagodaBox和我正在构建的应用程序中的后台工作程序。基本上,PagodaBox为你守护一个PHP进程(意味着它将在后台继续运行),所以你真正需要做的就是创建一个脚本来检查数据库表中的任务,运行它们,然后睡一会儿等等。它没有针对您的数据库运行太多查询。

这是我运行的简化版本:

// Remove time limit
set_time_limit(0);

// Show ALL errors
error_reporting(-1);

// Run daemon
echo "--- Starting Daemon ---\n";
while(true) {

    // Query 'work_queue' table for new tasks
    // Loop over items and do whatever tasks are associated with them
    // Update row to mark task as completed

    // Wait a bit
    sleep(30);
}

这种方法的好处是可以通过CLI轻松测试:

php tasks.php

你会看到所有echo语句在运行时都在控制台中出现,当然它比使用其他依赖项如Gearman的更复杂的设置要容易得多。

因此,无论何时向表中添加新任务,您在批处理中等待该任务的最长时间为30秒(或者您的睡眠时间)。这比cron作业更好,更可取,因为如果你设置一个cron作业来运行每分钟(最低可能的间隔)并且你必须做的工作花费的时间超过一分钟,那么另一个cron进程将开始在同一个队列上运行你最终可能会遇到很多重复的任务工作,这可能会导致许多难以调试和排除故障的问题。因此,如果您只有一个后台工作程序运行所有任务,或者多个后台工作程序处理不同的任务类型,那么您将永远不会遇到此问题。