ホームページ PHPフレームワーク ThinkPHP Think-Swoole Task 非同期タスク

Think-Swoole Task 非同期タスク

Oct 27, 2020 pm 01:39 PM
think-swoole

Think-Swoole Task 非同期タスク

使用シナリオ

サーバー プログラムで次のような時間のかかる操作を実行する必要がある場合。ブロードキャストを送信するチャット サーバー、Web サーバーから電子メールを送信します。これらの関数を直接実行すると、現在のプロセスがブロックされ、サーバーの応答が遅くなります。例: ユーザー登録シナリオでは、登録を完了してアクティベーション電子メールを送信する機能には次の手順が必要です:

クライアントが POST データを送信 -> サーバーがデータを取得 -> 登録を完了して書き込みユーザー データをデータベースに保存 - > アカウント アクティベーション電子メールを送信 -> クライアントに戻り、登録が成功したことを示すメッセージが表示されます。

このビジネス ロジックには問題はありませんが、電子メールの送信は時間のかかる操作 (2 ~ 3 秒など) であり、送信後にクライアントが正常に登録するように求められるまで、プログラムの実行が同期的にブロックされます。送信は成功しました。このプロセスでは、送信から最終的な登録成功の通知までに約 4 秒かかると推定されており、リクエストの応答には 4 秒かかります。

タスクの非同期タスク配信を使用すると、ユーザー エクスペリエンスが大幅に向上します。一般的なプロセスは次のとおりです:

クライアントが POST データを送信 -> サーバーがデータを取得 -> 登録と完了ユーザー データをデータベースに書き込みます -> すぐにクライアントに戻り、登録が成功したことを示すプロンプトを表示します。

登録が成功したらタスク タスクを配信します -> 時間のかかる電子メール送信操作を非同期で完了します (応答がクライアントに返されているため、ユーザーはこの部分に気づきません)非常に早い)。

Think-Swoole の Task 非同期タスク ステップの使用方法

イベント リスニング クラス (php think make:listener クラス名) を定義します。

swoole.task のイベント監視は app/event.php ファイルで定義されます。

Swoole/Server オブジェクトを取得し、タスク メソッドを呼び出します (パラメータで定義したばかりのリスニング クラスを渡します)。

定義したばかりのイベント リスニング クラスのハンドル メソッドでトリガー コールバック ロジック コードを定義します。

タスクが完了した後、タスク swoole.finish をトリガーする終了メソッドを呼び出します (必須ではなく、必要な場合にのみ呼び出されます)。

デモ

まず、プロジェクトのルート ディレクトリにメール送信イベントを作成します:

php think make:listener EmailTask
ログイン後にコピー

次に、作成したメール送信イベントを定義します:

app/event.php
'listen'    => [
    'AppInit'  => [],
    'HttpRun'  => [],
    'HttpEnd'  => [],
    'LogLevel' => [],
    'LogWrite' => [],
    'swoole.task' => [
        app\listener\EmailTask::class,
    ],
//  'swoole.finish' => [
//      app\listener\EmailTaskFinish::class,
//  ],
],
ログイン後にコピー

swoole.task のキー名は Task ですが、タスクの記述方法は決まっており、任意に名前を付けることはできません。

次に、ユーザー登録を担当するコントローラーの Swoole/Server クラスを介して Task 非同期タスクを呼び出します。もちろん、最初に EmailTask​​.php のロジック コードを改善する必要があります:

app /listener/EmailTask​​.php

<?php
declare (strict_types = 1);
namespace app\listener;
class EmailTask
{
    /**
     * 事件监听处理
     *
     * @return mixed
     */
    public function handle($event)
{
        echo "开始发送邮件:".time();
        //模拟耗时 3 秒,测试是否在响应事件内
        sleep(3);
        echo "邮件发送成功:".time();
        // 可以调用 finish 方法通知其他事件类,通知当前异步任务已经完成了(非必须调用)
        // 参数 $event 是 Swoole\Server\Task 类的一个对象 可以调用 finish 方法触发 task 任务的 onFinish 事件
        // $event -> finish(\app\listener\EmailTaskFinish::class);
    }
}
ログイン後にコピー

登録メソッド app/controller/Register.php

<?php
namespace app\controller;
use app\BaseController;
class Register extends BaseController
{
    public function register(\Swoole\Server $server)
{
        if($this -> request -> isPost()){
            $data = $this -> request -> post();
            //TODO 调用验证类验证数据
            //TODO 将注册信息插入数据库
            // 这里调用 Task 异步任务
            $server -> task(\app\listener\EmailTask::class);
            // 方式二
//            $manager = app(&#39;\think\swoole\Manager&#39;);
//            $manager -> getServer() -> task(\app\listener\EmailTask::class);
            return "注册成功!".time();
        }
    }
}
ログイン後にコピー

登録ビジネスでは、データベースに挿入した後、電子メールを送信する非同期タスクが呼び出され、電子メールは EmailTask​​.php でシミュレートされます。これには 3 秒かかります。

Think-Swoole サービスを開き、登録メソッドにアクセスし、電子メールの送信時間がユーザー登録メソッドに含まれているかどうかをテストします:

Think-Swoole Task 非同期タスク

Visible 、電子メールが送信されます。3 秒間は非同期で実行され、ユーザーはそれを認識しません。

さらに、現在の非同期タスクが完了したことを他のイベントに通知するために使用される swoole.finish イベントがあります。また、イベントを作成し、app/event で swoole.finish を定義する必要があります。 php. 上記のサンプルコードはデモされています。

以上がThink-Swoole Task 非同期タスクの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

TP6 Think-Swoole RPC サービスのパフォーマンスの最適化とデバッグ TP6 Think-Swoole RPC サービスのパフォーマンスの最適化とデバッグ Oct 12, 2023 am 11:16 AM

TP6Think-SwooleRPC サービスのパフォーマンスの最適化とデバッグ 1. はじめに インターネットの急速な発展に伴い、分散コンピューティングは現代のソフトウェア開発に不可欠な部分となっています。分散コンピューティングでは、RPC (RemoteProcedureCall、リモート プロシージャ コール) は、ネットワーク全体でメソッド呼び出しを実装できる一般的に使用される通信メカニズムです。 Think-Swoole は、高性能 PHP フレームワークとして、RPC サービスを適切にサポートできます。しかし

TP6 Think-Swoole RPC サービスの高い拡張性と分散展開 TP6 Think-Swoole RPC サービスの高い拡張性と分散展開 Oct 12, 2023 am 11:07 AM

TP6 (ThinkPHP6) は、PHP をベースとしたオープンソースのフレームワークであり、高い拡張性と分散展開の特徴を持っています。この記事では、TP6 と Swoole 拡張機能を使用して拡張性の高い RPC サービスを構築する方法と、具体的なコード例を紹介します。まず、TP6 と Swoole 拡張機能をインストールする必要があります。コマンドラインで次のコマンドを実行します:composerrequiretopthink/thinkpeclinstallswo

TP6 Think-Swoole RPC サービスのデータ暗号化と本人認証メカニズム TP6 Think-Swoole RPC サービスのデータ暗号化と本人認証メカニズム Oct 12, 2023 am 11:29 AM

TP6Think-SwooleRPC サービスのデータ暗号化と ID 認証メカニズム インターネットの急速な発展に伴い、異なるモジュール間のデータ対話や関数呼び出しを実現するためにリモート呼び出しを行う必要のあるアプリケーションがますます増えています。このような状況において、RPC (RemoteProcedureCall) は重要な通信方法となっています。高性能な RPC サービスを実装できる TP6Think-Swoole フレームワークでのデータ暗号化と本人認証の使い方を紹介します。

TP6 Think-Swoole RPC サービスの高度な同時リクエスト処理とスケジューリング TP6 Think-Swoole RPC サービスの高度な同時リクエスト処理とスケジューリング Oct 12, 2023 pm 12:33 PM

TP6Think-SwooleRPC サービスの高度な同時リクエスト処理とスケジューリング インターネット技術の継続的な発展に伴い、ネットワーク アプリケーションの同時リクエスト処理とスケジューリングが重要な課題となっています。 TP6 フレームワークでは、Think-Swoole 拡張機能を使用して、同時実行性の高いリクエスト処理と RPC (RemoteProcedureCall) サービスのスケジューリングを実装できます。この記事では、TP6 フレームワークで Think-Swoole ベースの RPC サービスを構築し、提供する方法を紹介します。

TP6 Think-Swoole の RPC サービスとメッセージ キューの統合とアプリケーション TP6 Think-Swoole の RPC サービスとメッセージ キューの統合とアプリケーション Oct 12, 2023 am 11:37 AM

TP6Think-Swoole の RPC サービスとメッセージ キューの統合とアプリケーション 最新のソフトウェア開発では、RPC サービス (RemoteProcedureCall) とメッセージ キューは、分散システムでサービス コールと非同期メッセージ処理を実装するために使用される一般的な技術手段です。 Think-Swoole コンポーネントを TP6 フレームワークに統合すると、RPC サービスとメッセージ キューの機能を簡単に実装でき、開発者が理解して適用できる簡潔なコード例が提供されます。 1.RPC

TP6 Think-Swoole RPC サービスのセキュリティ保護と認可検証 TP6 Think-Swoole RPC サービスのセキュリティ保護と認可検証 Oct 12, 2023 pm 01:15 PM

TP6Think-SwooleRPC サービスのセキュリティ保護と認可検証 クラウド コンピューティングとマイクロサービスの台頭により、リモート プロシージャ コール (RPC) は開発者の日常業務に不可欠な部分になりました。 RPC サービスを開発する場合、正当なリクエストのみがサービスにアクセスして呼び出すことができるようにするため、セキュリティ保護と認可の検証が非常に重要です。この記事では、TP6Think-Swoole フレームワークで RPC サービスのセキュリティ保護と認可検証を実装する方法を紹介します。 1. RPCサービスの基本概念

TP6 Think-Swoole RPC サービスのパフォーマンス テストとパフォーマンス チューニング TP6 Think-Swoole RPC サービスのパフォーマンス テストとパフォーマンス チューニング Oct 12, 2023 pm 02:19 PM

TP6Think-SwooleRPC サービスのパフォーマンス テストとパフォーマンス チューニング 1. はじめに インターネットの急速な発展に伴い、分散システムの適用はますます普及しています。分散システムでは、RPC (リモート プロシージャ コール) が一般的な通信メカニズムであり、これにより、異なるノード上のサービスが相互に呼び出し、分散システムでの共同作業を実現できます。 TP6 フレームワークでは、Think-Swoole は高性能 Swoole ドライバーとして、便利な RPC サービス サポートを提供します。この記事では主にTについて紹介します。

Think-Swoole によって構築された TP6 RPC サービスおよびマイクロサービス アーキテクチャの実践ケース Think-Swoole によって構築された TP6 RPC サービスおよびマイクロサービス アーキテクチャの実践ケース Oct 12, 2023 pm 12:04 PM

TP6Think-Swoole が構築した RPC サービスとマイクロサービス アーキテクチャの実践事例の紹介: インターネットの急速な発展とビジネス規模の拡大に伴い、従来のモノリシック アーキテクチャでは大規模なビジネス シナリオのニーズを満たすことができなくなりました。そこで、マイクロサービス アーキテクチャが登場しました。マイクロサービス アーキテクチャでは、RPC (RemoteProcedureCall) サービスはサービス間の通信を実現する重要な方法です。 RPC サービスを通じて、さまざまなマイクロサービスが便利かつ効率的に相互に呼び出すことができます。記事上で

See all articles