我正在用 PHP 构建 Web 应用程序,用于在未来安排任务。在后台,我应该每 2 分钟轮询一次数据库,看看是否有任何即将到来的任务。如何实现轮询。Javascript 解决方案没有帮助,因为用户可以在 webapp 上的任何页面上,但系统应该继续汇集数据库。
Cron 是一种方法,但我仍然必须轮询数据库以创建 cron 作业。实施它的最佳方法是什么?
谢谢
我正在用 PHP 构建 Web 应用程序,用于在未来安排任务。在后台,我应该每 2 分钟轮询一次数据库,看看是否有任何即将到来的任务。如何实现轮询。Javascript 解决方案没有帮助,因为用户可以在 webapp 上的任何页面上,但系统应该继续汇集数据库。
Cron 是一种方法,但我仍然必须轮询数据库以创建 cron 作业。实施它的最佳方法是什么?
谢谢
创建一个每 X 分钟执行一次的 cron 作业,并让该作业检查数据库。如果有新的即将到来的任务,只需让作业启动它。
创建一个 '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);