首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宝塔或PHPfog +齿轮

宝塔或PHPfog +齿轮
EN

Stack Overflow用户
提问于 2012-10-25 00:06:20
回答 1查看 324关注 0票数 1

全,

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

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

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

问题2是,http://help.pagodabox.com/customer/portal/articles/430779我看到pagodabox支持“工人监听器”……有没有人跟gearman说好了?它会起作用吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-02 01:46:45

在我正在构建的应用程序中,我正在通过后台工作人员使用PagodaBox。基本上,PagodaBox为您守护一个PHP进程(这意味着它将在后台持续运行),所以您真正需要做的就是创建一个脚本,检查数据库表中要运行的任务,然后运行它们,然后稍作休眠,这样它就不会对您的数据库运行太多查询。

这是我运行的代码的简化版本:

代码语言:javascript
复制
// 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进行测试:

代码语言:javascript
复制
php tasks.php

您将看到所有的echo语句都在console中运行,当然这比使用其他依赖项(如Gearman )进行更复杂的设置要容易得多。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13053132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档