【问题标题】:Scheduling tasks after polling the database php轮询数据库php后调度任务
【发布时间】:2013-08-21 14:20:37
【问题描述】:

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

Cron 是一种方法,但我仍然必须轮询数据库以创建 cron 作业。实施它的最佳方法是什么?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      创建一个 '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);
      

      【讨论】:

      • 不,它必须extends Command,所以它是一个命令。可以成为控制器的是ExecuteTasksClass,但我认为这并不完全好。您可以在此处获取更多信息:laravel.com/docs/commands
      猜你喜欢
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2012-10-06
      • 2018-12-01
      • 2012-08-18
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多