Background process 宝塔箱或PHPfog+;齿轮工

Background process 宝塔箱或PHPfog+;齿轮工,background-process,gearman,paas,phpfog,Background Process,Gearman,Paas,Phpfog,全部, 我正在寻找一个很好的方法来做一些工作背景通过这两个服务之一 我看到PHPFog支持IronWorks,但我需要更实时的东西。通过这些基于云的PaaS服务,我无法使用popen(background.php--token=1234)。所以我在想最好的解决办法,可能是试着让一个齿轮工来处理这项工作。(实际上,我更喜欢的方法是使用WebSocket保持连接打开并接收作业反馈,而不是通过AJAX长时间轮询db表,但这些家伙都不支持WebSocket) 问题1是,有没有比使用gearman卸下工作

全部,

我正在寻找一个很好的方法来做一些工作背景通过这两个服务之一

我看到PHPFog支持IronWorks,但我需要更实时的东西。通过这些基于云的PaaS服务,我无法使用
popen(background.php--token=1234)
。所以我在想最好的解决办法,可能是试着让一个齿轮工来处理这项工作。(实际上,我更喜欢的方法是使用WebSocket保持连接打开并接收作业反馈,而不是通过AJAX长时间轮询db表,但这些家伙都不支持WebSocket)

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

问题2是,我看到pagodabox支持“工作侦听器”。。。有人和gearman安排好了吗?这样行吗


谢谢

我正在构建的应用程序中使用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进程将在同一个队列上开始工作,您可能会完成大量重复的任务工作,这可能会导致许多难以调试和排除的问题。因此,如果您只有一个后台工作人员运行所有任务,或者有多个后台工作人员处理不同的任务类型,您将永远不会遇到这个问题。

此外,我应该提到,我曾考虑创建一个DB作业队列,然后运行一个cron作业来检查该队列,但这对我来说似乎有点荒谬。我需要一些实时的东西,并且必须每1秒检查一次数据库,看看是否有一个新的工作看起来太过分了。