ホームページ  >  記事  >  PHPフレームワーク  >  Swooleでスケジュールされたタスクを実装する方法について話しましょう

Swooleでスケジュールされたタスクを実装する方法について話しましょう

PHPz
PHPzオリジナル
2023-03-28 10:17:352177ブラウズ

Swoole は、PHP 言語の優れた非同期フレームワークであり、基礎となるネイティブ API を提供することで、PHP 開発者に高い同時実行性、高性能、分散などの要件を処理する機能を提供します。 Swoole では、スケジュールされたタスクは非常に一般的な要件です。この記事ではSwooleでスケジュールタスクを実装する方法を紹介します。

1. Swoole Timer

1.1 Swoole Timer の概要

Swoole には、指定した時間に使用できる非常に便利なタイマー機能があります。タスク。 Swooleタイマーはシステムが提供するタイマーを利用せず、自らタイマー機能を実装します。

1.2 Swoole タイマーの構文

Swoole タイマーを使用するには、次の 2 つの関数を習得する必要があります:

(1) swoole_timer_tick

この関数はタイマー ループの実行を実装できます タスクが実行されます指定された時間ごとに。構文は次のとおりです。

$timer_id = swoole_timer_tick(2000, function () {
  //这里是你要执行的任务
});

上記のコードでは、swoole_timer_tick 関数の最初のパラメーター 2000 は、タスクが 2000 ミリ秒ごとに実行されることを意味します。

(2) swoole_timer_after

この関数はタスクを実行するためのタイマーを実装し、指定された時間に達した後にタスクを実行できます。構文は次のとおりです。

$timer_id = swoole_timer_after(2000, function () {
  //这里是你要执行的任务
});

上記のコードでは、swoole_timer_after 関数の最初のパラメーター 2000 は、タスクが 2000 ミリ秒後に実行されることを意味します。

1.3 Swoole タイマーの例

以下は、Swoole タイマーを使用してタイマーを実装するサンプル コードです:

<?php
$timer_id = swoole_timer_tick(2000, function () {
echo "定时器执行任务".PHP_EOL;    
});
//延迟10秒钟后清除定时器
swoole_timer_after(10000, function () use ($timer_id){
swoole_timer_clear($timer_id);
echo "清除定时器".PHP_EOL;
});
?>

上記のコードでは、swoole_timer_tick 関数は次の間隔で実行されます。 2秒 1回「タイマー実行タスク」を出力します。 swoole_timer_after 関数を使用して、10 秒後に実行されるタスククリアタイマーを作成し、「clear timer」を出力します。

2. Swoole Crontab のスケジュールされたタスク

2.1 Swoole Crontab の概要

Timer タイマーに加えて、Swoole は Crontab のスケジュールされたタスクも提供します。指定されたタスクを実行するようにスケジュールすることができます。

2.2 Swoole Crontab の構文

Swoole Crontab を使用するには、次の関数を理解する必要があります:

(1) swoole\Coroutine\Cron::add()

この関数を使用して、スケジュールされたタスクを追加します。例:

$cron = new swoole\Coroutine\Cron();
$cron->add(&#39;/1 *&#39;, function () {
//这里是你要执行的任务
});
$cron->start();

上記のコードでは、指定されたタスクを毎分実行するようにスケジュールされたタスクが追加されます。

(2) Cron タスクでサポートされる時間形式

Cron タスクは次の時間形式をサポートします:

形式の説明:

minutes (0 - 59) 時間 (0-23) 日 (1-31) 月 (1-12) 週 (0-7)

このうち、「週」の 0 と 7 は日曜日を表し、1- 6 月曜日から土曜日までを示します。

2.3 Swoole Crontab の例

以下は、Swoole Crontab を使用してスケジュールされたタスクを実装するサンプル コードです:

<?php
$cron = new swoole\Coroutine\Cron();
$cron->add(&#39;/1 *&#39;, function () {
echo &#39;计划任务执行&#39;.PHP_EOL;
});
$cron->start();
?>

上記のコードでは、スケジュールされたタスクを追加し、指定されたタスクを毎分タスク、「計画されたタスクの実行」を出力します。

3. Swoole プロセスとコルーチンのスケジュールされたタスク

Timer タイマーと Crontab のスケジュールされたタスクに加えて、Swoole はプロセスまたはコルーチンを使用してスケジュールされたタスクを実装することもできます。

3.1 Swoole プロセスのスケジュールされたタスク

Swoole プロセスを使用してスケジュールされたタスクを実装する手順は次のとおりです。

(1) プロセスを作成します

$process = new swoole_process(function () {
//任何你想执行的任务
});

(2) プロセスを開始します

$process->start();

(3) タイマーを設定します

swoole_timer_tick(2000, function ($timer_id, $params) use ($process) {
if (!$process->isRunning()) {
    echo "进程已结束".PHP_EOL;
    swoole_timer_clear($timer_id);
}
});

上記のコードでは、プロセスが作成されます、プロセスを開始し、swoole_timer_tick 関数を使用してプロセスのタイマーを設定し、プロセスが 2 秒ごとに実行されているかどうかを確認します。

3.2 Swoole コルーチンのスケジュールされたタスク

Swoole コルーチンを使用してスケジュールされたタスクを実装する手順は次のとおりです:

(1) コルーチンを作成します

$cid = go(function () {
//任何你想执行的任务
});

(2) タイマーの設定

swoole_timer_tick(2000, function ($timer_id, $params) use ($cid) {
if (!swoole_coroutine_exists($cid)) {
    echo "协程已结束".PHP_EOL;
    swoole_timer_clear($timer_id);
}
});

上記のコードでは、コルーチンを作成し、swoole_timer_tick 関数を使用してコルーチンのタイマーを設定し、コルーチンが 2 秒ごとに実行されているかどうかを確認します。

4. 概要

この記事では、Swoole でスケジュールされたタスクを実装する 3 つの方法、タイマー タイマー、Crontab のスケジュールされたタスクとプロセス、コルーチンのスケジュールされたタスクを紹介します。開発者は、スケジュールされたタスク機能を実装するために、独自のニーズに応じて適切な方法を選択できます。この記事の導入により、読者は Swoole でスケジュールされたタスクを実装する方法を習得したと思います。読者が Swoole フレームワークを使用する際に役立つことを願っています。

以上がSwooleでスケジュールされたタスクを実装する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。