ホームページ > 記事 > PHPフレームワーク > Swoole を使用して高パフォーマンスの JSONRPC サービスを実装する方法
ネットワーク開発において、RPC (リモート プロシージャ コール) は、リモート プログラムが相互に呼び出して分散アプリケーションを実装できるようにする一般的な通信プロトコルです。近年、PHP エコシステムの開発が成熟し続けるにつれて、PHP 言語で高パフォーマンスの RPC を実装する必要性がますます高まっています。Swoole は、PHP 拡張機能として、非同期、同時、高パフォーマンスのネットワークを提供します。通信機能を強化し、高パフォーマンス RPC を実現する方法となっており、パフォーマンス RPC に最適な選択肢です。
この記事では、Swoole を使用して高パフォーマンスの JSONRPC サービスを実装し、それによってアプリケーションのパフォーマンスとスループットを向上させる方法に焦点を当てます。
1. JSONRPC プロトコルの概要
JSONRPC (JavaScript Object Notation Remote Procedure Call) は、JSON 形式に基づく軽量のリモート呼び出しプロトコルであり、統一されたインターフェイス仕様のセットを定義しています。 -さまざまなアプリケーション間の無料通信。 JSONRPC プロトコルでは、各リクエストとレスポンスは JSON オブジェクトであり、どちらにもリクエストとレスポンスの間の対応関係を識別する ID フィールドが含まれています。
リクエストの例:
{ "jsonrpc": "2.0", "method": "login", "params": { "username": "user", "password": "pass" }, "id": 1 }
レスポンスの例:
{ "jsonrpc": "2.0", "result": true, "id": 1 }
JSONRPC プロトコルでは、リクエスタはメソッド フィールドとパラメータ フィールドを含むリクエストを送信することで他のアプリケーションを呼び出します。 ; プロバイダーは、結果フィールドを含む応答を返すことによって呼び出し結果を返します。 JSONRPC プロトコルはバッチ リクエストとバッチ レスポンスをサポートしているため、ネットワーク通信のオーバーヘッドを効果的に削減できます。
2. Swoole を使用して JSONRPC サービスを実装する
始める前に、まず Swoole 拡張機能をインストールする必要があります。次のコマンドを使用してインストールできます:
pecl install swoole
次の行を php.ini ファイルに追加してインストールすることもできます:
extension=swoole.so
インストールが完了したら、php.ini ファイルを使用できます。 -m コマンドを使用して、swoole 拡張機能が正常にインストールされたかどうかを確認します。
単純な JSONRPC サーバーを実装しましょう。具体的なコードは次のとおりです:
<?php require_once __DIR__ . '/vendor/autoload.php'; use SwooleHttpServer; use SwooleHttpRequest; use SwooleHttpResponse; $server = new Server('0.0.0.0', 8080); $server->on('Request', function (Request $request, Response $response) { $data = $request->rawContent(); $arr = json_decode($data, true); if (isset($arr['method'])) { switch ($arr['method']) { case 'login': $result = login($arr['params']['username'], $arr['params']['password']); break; case 'register': $result = register($arr['params']['username'], $arr['params']['password']); break; default: $result = ['error' => 'Method not found']; break; } } else { $result = ['error' => 'Invalid request']; } $response->header('Content-Type', 'application/json'); $response->end(json_encode([ 'jsonrpc' => '2.0', 'result' => $result, 'id' => $arr['id'] ])); }); function login($username, $password) { // do login return true; } function register($username, $password) { // do register return true; } $server->start();
上記のコードは、JSONRPC サーバーを実装します。ログイン メソッドと登録メソッドを処理するメソッドは、リクエスト本文のデータを解析し、対応するメソッドを呼び出して処理し、最終的に処理結果を JSON 形式で返します。
JSONRPC サーバーの機能をテストするには、JSONRPC クライアントも実装する必要があります。具体的なコードは次のとおりです:
<?php class JsonRpcClient { private $host; private $port; private $id; public function __construct($host, $port) { $this->host = $host; $this->port = $port; $this->id = 0; } public function send($method, $params) { $client = new SwooleClient(SWOOLE_SOCK_TCP); if (!$client->connect($this->host, $this->port, 0.5)) { throw new Exception('Connect failed'); } $client->send(json_encode([ 'jsonrpc' => '2.0', 'method' => $method, 'params' => $params, 'id' => ++$this->id, ])); $data = $client->recv(); if (!$data) { throw new Exception('Recv failed'); } $client->close(); $response = json_decode($data, true); if (isset($response['error'])) { throw new Exception($response['error']['message']); } return $response['result']; } } $client = new JsonRpcClient('127.0.0.1', 8080); try { $result = $client->send('login', ['username' => 'user', 'password' => 'pass']); var_dump($result); } catch (Exception $e) { echo $e->getMessage(); }
上記のコードは、JSONRPC サーバーにリクエストを送信し、応答結果を取得できる JSONRPC クライアントを実装しています。 sendメソッドを呼び出し、methodとparamsパラメータを渡すことでJSONRPCサーバーにリクエストを送信し、レスポンス結果を取得できます。リクエストが失敗した場合、またはエラー メッセージが返された場合は、例外がスローされます。
3. Swoole に基づく JSONRPC サービスのパフォーマンス テスト
Swoole に基づく JSONRPC サービスのパフォーマンスの利点を検証するために、簡単なパフォーマンス テストを実行できます。テスト環境の構成は次のとおりです。
Concurrency Level: 1000 Time taken for tests: 1.701 seconds Complete requests: 400000 Failed requests: 0 Total transferred: 78800000 bytes Requests per second: 235242.03 [#/sec] (mean) Time per request: 42.527 [ms] (mean) Time per request: 0.043 [ms] (mean, across all concurrent requests) Transfer rate: 45388.31 [Kbytes/sec] receivedテスト結果から、Swoole ベースの JSONRPC サービスは非常に高いパフォーマンスを持っています。1,000 件の同時リクエストの場合、各リクエストは平均処理時間はわずか 42.527 ミリ秒で、リクエスト スループットは 235242.03 回/秒に達します。 4. 概要この記事では、Swoole を使用して高パフォーマンスの JSONRPC サービスを実装する方法を紹介し、パフォーマンス テストを通じてそのパフォーマンスの利点を証明します。実際のアプリケーションでは、ニーズに応じて複雑な RPC サービスを実装し、Swoole の非同期、同時実行、および高性能機能を通じてアプリケーションのパフォーマンスとユーザー エクスペリエンスを向上させることができます。
以上がSwoole を使用して高パフォーマンスの JSONRPC サービスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。