轮询数据库php后调度任务

时间:2013-08-19 17:33:02

标签: php database scheduled-tasks laravel-4 long-polling

我正在使用PHP构建Web应用程序,用于将来安排任务。在后台我应该每2分钟轮询数据库,看看是否有任何即将到来的任务。我如何实施轮询。 Javascript解决方案没有帮助,因为用户可以在webapp上的任何页面上,但系统应该保持汇集数据库。

Cron是单向的,但我仍然需要轮询数据库来创建一个cron作业。实施它的最佳方法是什么?

由于

2 个答案:

答案 0 :(得分:0)

创建一个每X分钟执行一次的cron作业,并使该作业检查数据库。如果有即将到来的新任务,只需将作业启动即可。

答案 1 :(得分:0)

创建'execute:tasks'artisan命令,这样您就可以在需要执行任务时轮询数据库。您应该能够以这种方式运行它:

php artisan execute:tasks

您的命令将调用某些控制器操作(或类方法)来轮询数据库并查找是否有可执行的任务。

然后你只需要创建一个每2分钟执行一次artisan命令的cron作业:

*/2 * * * * php artisan execute:tasks

这是Artisan命令的一个例子:

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class ExecuteTasksCommand extends Command {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'execute:tasks';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Find and execute available tasks.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function fire()
    {
        (new ExecuteTasksClass)->findAndExecute();
    }

}

您只需将此文件命名为app / commands / ExecuteTasksCommand.php

并将其添加到app\start\artisan.php

Artisan::add(new ExecuteTasksCommand);