ThinkPHP6 と Swoole の RPC サービスをベースにした非同期タスク処理の実現
はじめに:
インターネットの急速な発展に伴い、非同期タスク処理がますます増えています。 Web 開発ではますます重要性が増しています。たとえば、ユーザーがフォームを送信し、バックエンドで時間のかかる操作を実行する必要がある場合、ユーザーが長時間待たされることを避けるために、これらの操作をバックグラウンドで非同期に実行してユーザー エクスペリエンスを向上させることができます。この記事では、これらの非同期タスクを処理するために、ThinkPHP6 と Swoole を使用して RPC (リモート プロシージャ コール) サービスを実装する方法を紹介します。
1. RPC の概要##RPC は、プログラムがローカル関数を呼び出すのと同じようにリモート コンピュータ上の関数を呼び出せるようにするコンピュータ通信プロトコルです。 RPC を使用すると、ネットワーク通信ではなくビジネス ロジックの作成に集中できるため、開発効率とコードの保守性が向上します。
始める前に、いくつかの準備作業を行う必要があります:
Composer を通じてインストールできます。次のコマンドを実行します:
composer require topthink/think-swoole
次のコードを ThinkPHP6 構成ファイル
config/swoole.php に追加します:
<?php return [ 'rpc' => [ 'server' => 'http://localhost:9502', 'timeout' => 3, 'token' => 'your_rpc_token', ], ];
次の内容を含む RPC サービス ファイル
rpc_server.php を作成します。
<?php require __DIR__ . '/vendor/autoload.php'; use SwooleCoroutineHttpServer; use SwooleCoroutine; use SwooleHttpRequest; use SwooleHttpResponse; $server = new Server('0.0.0.0', 9502, false); $server->handle('/', function (Request $request, Response $response) { $data = $request->get; $response->header('Content-Type', 'application/json'); // 验证访问令牌 $token = $request->header['authorization'] ?? ''; if ($token !== 'your_rpc_token') { $response->status(403); $response->end(json_encode(['msg' => 'Access denied'])); return; } // 处理RPC请求 $method = $data['method'] ?? null; $params = $data['params'] ?? []; if (!$method) { $response->status(400); $response->end(json_encode(['msg' => 'Bad request'])); return; } // 执行业务逻辑 $result = invoke($method, $params); // 返回结果 $response->end(json_encode(['result' => $result])); }); function invoke($method, $params) { // TODO: 实现具体的业务逻辑 // 模拟耗时的任务 Coroutine::sleep(1); // 返回结果 return "Hello, RPC!"; } $server->start();
invoke 関数が呼び出され、特定のビジネス ロジックが実行されます。この例では、1 秒かかり、結果として文字列を返すタスクをシミュレートします。
ThinkPHP6 プロジェクトで RPC サービスを呼び出すには、コントローラーを作成し、メソッドで
Rpc::call を使用します RPC リクエストを開始します。以下はサンプル コードです。
<?php namespace appcontroller; use thinkacadeRpc; use thinkacadeView; class Index { public function index() { // 调用RPC服务 $result = Rpc::call('task', ['param1', 'param2']); // 显示结果 return View::fetch('index', ['result' => $result]); } }
Rpc::call メソッドを使用して RPC サービスを呼び出しました。最初のパラメータはメソッド名で、2 番目のパラメータはメソッドのパラメータです。実際のニーズに応じて調整できます。
この記事では、ThinkPHP6 と Swoole を使用して、非同期タスクを処理する RPC サービスを実装する方法を紹介します。時間のかかるタスクをバックグラウンドで非同期実行することで、ユーザーの応答速度が向上し、ユーザーエクスペリエンスが向上します。同時に、RPC を使用するとコード開発が簡素化され、コードの保守性と拡張性が向上します。この記事がお役に立てば幸いです。
以上が非同期タスク処理を実装するための ThinkPHP6 および Swoole ベースの RPC サービスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。