1

将来のタスクをスケジュールするために使用される PHP で Web アプリを構築しています。バックグラウンドでは、次のタスクがあるかどうかを確認するために、2 分ごとにデータベースをポーリングすることになっています。ポーリングを実装するにはどうすればよいですか。ユーザーは webapp の任意のページにアクセスできるため、Javascript ソリューションは役に立ちませんが、システムは DB をプールし続ける必要があります。

Cron は 1 つの方法ですが、データベースをポーリングして cron ジョブを作成する必要があります。それを実装する最良の方法は何ですか?

ありがとう

4

2 に答える 2

0

「execute:tasks」職人コマンドを作成して、タスクを実行する必要があるときはいつでもデータベースをポーリングできるようにします。次の方法で実行できるはずです。

php artisan execute:tasks

コマンドは、コントローラー アクション (またはクラス メソッド) を呼び出して、データベースをポーリングし、実行可能なタスクがあるかどうかを確認します。

次に、職人のコマンドを 2 分ごとに実行する cron ジョブを作成する必要があります。

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

これはアーティザン コマンドの例です。

<?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);
于 2013-08-19T17:59:48.713 に答える