ホームページ > 記事 > PHPフレームワーク > ThinkPHP6 を使用してスケジュールされたタスク操作を実行するにはどうすればよいですか?
ThinkPHP6 は、効率的な Web アプリケーションの開発に役立つ多くの便利な機能を提供する人気のある PHP フレームワークです。その 1 つはスケジュールされたタスクです。この記事では、ThinkPHP6 のスケジュールタスク機能を使用して、データのバックアップやメール送信など、定期的に実行する必要があるタスクを実行する方法を紹介します。
ThinkPHP6 は、Swoole のコルーチン タイマーを使用して、効率的なスケジュールされたタスク機能を実現します。スケジュールされたタスクの使用を開始する前に、Swoole 拡張機能がインストールされていることを確認する必要があります。
Composer では、次のコマンドを使用して Swoole をインストールできます:
composer require swoole/swoole
インストール後、config/app.php
ファイルで Swoole 拡張機能を有効にする必要があります。 providers
配列を見つけて、thinkworkerProvider::class
:
'providers' => [ //… thinkworkerProvider::class, ],
ThinkPHP6 では、次のことができます。スケジュールされたタスクを定義するには 2 つの方法があります。 1 つは appcommand
という名前のコマンド クラスを作成する方法で、もう 1 つは thinkworkerServer
クラスを拡張する方法です。ここでは後者を採用します。
プロジェクトでは、以下に示すように、thinkworkerServer
から継承するクラスを作成する必要があります。
<?php namespace appsocket; use SwooleCoroutine; use thinkworkerServer; class Socket extends Server { protected $socket; public function onWorkerStart() { // 此处可以定义在 Worker 进程启动时需要执行的操作 } public function onConnect($server, $fd) { // 此处定义客户端连接时执行的操作 } public function onReceive($server, $fd, $reactor_id, $data) { // 此处定义客户端发送数据时的操作 } public function onClose($server, $fd) { // 此处定义客户端断开连接时的操作 } public function onTask($server, $task_id, $src_worker_id, $data) { // 自定义任务处理方法 } public function onFinish($server, $task_id, $data) { // 任务结束时的操作 } public function onPipeMessage($server, $from_worker_id, $message) { // 此处定义进程间通讯的逻辑 } }
上の例では、 onWorkerStart() を定義しました。
、onConnect()
、onReceive()
、onClose()
、onTask()
、onFinish()
、onPipeMessage()
およびその他のメソッド。これらのメソッドは、対応するイベントがトリガーされると自動的に実行されます。
バックグラウンド タスクでメソッドを実行したい場合は、Swoole の # を onWorkerStart()
##tick で使用できます。 () スケジュールされたタスクの実行頻度を設定するメソッド。たとえば、次のコードを例に挙げてみましょう。
public function onWorkerStart() { // 每五秒执行一次 backup() 方法 SwooleTimer::tick(5000, function () { (new Backup())->backup(); }); }上記のコードでは、
backup() メソッドが 5 秒ごとに実行されるように設定しています。このようにして、データの定期的なバックアップやメールの送信などのタスクを実現できます。
onTask( ) メソッドと
onFinish() メソッドを使用して、これらのタスクを処理します。たとえば、
public function onTask($server, $task_id, $src_worker_id, $data) { // 此处可以定义需要在任务中执行的操作 $result = (new Task())->execute($data); return $result; } public function onFinish($server, $task_id, $data) { // 任务执行结束后的操作 echo "Task #$task_id finished with result: $data "; }上記のコードでは、
onTask() メソッドと
onFinish() メソッドを定義しました。
onTask() メソッドはタスク中に実行する必要がある操作を定義し、
onFinish() メソッドはタスク終了後の操作を定義します。タスク内で長時間実行される操作を実行する必要がある場合は、
onTask() メソッドでコルーチンを使用できます。
以上がThinkPHP6 を使用してスケジュールされたタスク操作を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。