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('\think\swoole\Manager'); // $manager -> getServer() -> task(\app\listener\EmailTask::class); return "注册成功!".time(); } } }
登録ビジネスでは、データベースに挿入した後、電子メールを送信する非同期タスクが呼び出され、電子メールは EmailTask.php でシミュレートされます。これには 3 秒かかります。
Think-Swoole サービスを開き、登録メソッドにアクセスし、電子メールの送信時間がユーザー登録メソッドに含まれているかどうかをテストします:
Visible 、電子メールが送信されます。3 秒間は非同期で実行され、ユーザーはそれを認識しません。
さらに、現在の非同期タスクが完了したことを他のイベントに通知するために使用される swoole.finish イベントがあります。また、イベントを作成し、app/event で swoole.finish を定義する必要があります。 php. 上記のサンプルコードはデモされています。
以上がThink-Swoole Task 非同期タスクの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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