最新のネットワーク アプリケーションでは、高い同時実行性への対応は非常に重要な問題です。このプロセスでは、gRPC を使用すると、リモート プロシージャ コール (RPC) を通じて効率的なクライアント サーバー通信を実現する優れた方法となります。 PHP アプリケーションでは、gRPC を使用して、同時多発 API リクエストを処理できます。この記事では、gRPC を使用して PHP で同時実行性の高い API を処理する方法を紹介します。
gRPC とは何ですか?
gRPC は、Google によって開発された高性能 RPC フレームワークです。複数の言語をサポートし、複数のプラットフォームに基づくアプリケーションで使用できます。 gRPC は HTTP/2 プロトコルに基づいており、ネットワーク上で大量のデータを迅速かつ確実に送信できます。また、双方向ストリーミングもサポートしており、サーバーとクライアント間の真のストリーミングが可能です。
PHP での gRPC の使用
PHP で gRPC を使用するには、gRPC 拡張機能をインストールする必要があります。インストールプロセスについては、gRPC ドキュメント (https://grpc.io/docs/langages/php/quickstart/) を参照してください。
gRPC 拡張機能がインストールされたら、gRPC サービスの作成を開始できます。 gRPC では、サービスは proto ファイルを通じて定義されます。プロト ファイルにはデータ構造とサービス インターフェイスが記述されており、gRPC が提供するツールを使用して、PHP で使用する対応するコードを生成できます。
この記事では、簡単な例を使用して、PHP で gRPC を使用して同時多発 API リクエストを処理する方法を示します。この例では、ユーザーを作成および取得するための API を実装します。このサービスを説明するには、proto ファイルを定義する必要があります。
syntax = "proto3"; package user; service UserService { rpc getUser(GetUserRequest) returns (GetUserResponse); rpc createUser(CreateUserRequest) returns (CreateUserResponse); } message GetUserRequest { string userId = 1; } message GetUserResponse { string name = 1; string email = 2; } message CreateUserRequest { string name = 1; string email = 2; } message CreateUserResponse { string userId = 1; }
この proto ファイルでは、getUser と createUser の 2 つのメソッドを持つ UserService サービスを定義します。 getUser メソッドは、パラメーターとして GetUserRequest オブジェクトを必要とし、GetUserResponse オブジェクトを返します。createUser メソッドは、パラメーターとして CreateUserRequest オブジェクトを必要とし、CreateUserResponse オブジェクトを返します。 gRPC が提供するツールを使用して、この proto ファイルを PHP コードにコンパイルできます。
protoc --php_out=./gen --grpc_out=./gen --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
このコマンドは、proto ファイルを PHP コードにコンパイルし、生成されたコードを gen ディレクトリに配置します。これらの生成されたコードを PHP コードで使用して、gRPC サービスを実装できます。
require_once 'vendor/autoload.php'; class UserServiceImpl extends userUserServiceServer { public function getUser(userGetUserRequest $request, $context) { // ... } public function createUser(userCreateUserRequest $request, $context) { // ... } } $server = new GrpcServer(); $server->addService(userUserService::class, new UserServiceImpl()); $server->listen('127.0.0.1:50051');
この PHP コードでは、userUserServiceServer クラスを継承する UserServiceImpl クラスを実装します。このクラスは getUser メソッドと createUser メソッドを実装し、リクエストを処理します。リクエストごとに、gRPC は新しい UserServiceImpl インスタンスを作成し、メソッド呼び出し時にコンテキスト パラメーターを渡します。 gRPC サービスを開始するには、新しい Server オブジェクトを作成し、サービスをサーバーに追加し、サーバーをアドレスとポートにバインドする必要があります。
PHP クライアントでの gRPC の使用
PHP クライアントでの gRPC の使用も非常に簡単です。 gRPC が提供するコード ジェネレーターを使用して、クライアント上で gRPC サービスを呼び出すための PHP コードを生成できます。コード ジェネレーターに必要な入力は、.proto ファイルと --php_out フラグです。
この例では、.proto ファイルを作成しました。次のコマンドを使用して、PHP コードとして生成できます。
protoc --php_out=./gen --grpc_out=./gen --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
このコマンドは、gRPC サービスとの通信に必要な PHP ファイルを含むユーザー ディレクトリを gen ディレクトリに生成します。
これらのファイルを PHP クライアントにインポートすると、それらを使用してサービスを呼び出すことができます:
require_once 'vendor/autoload.php'; $client = new userUserServiceClient('127.0.0.1:50051', [ 'credentials' => GrpcChannelCredentials::createInsecure(), ]); $getuser_request = new userGetUserRequest(); $getuser_request->setUserId('123'); $user = $client->getUser($getuser_request)->wait(); echo $user->getName() . " "; echo $user->getEmail() . " ";
この PHP クライアント コードでは、新しい UserServiceClient オブジェクトを作成し、それをサーバーにバインドします。アドレスとポート。また、GetUserRequest オブジェクトを作成し、ユーザー ID を 123 に設定し、$client を使用して getUser メソッドを呼び出します。応答を待ち、返された GetUserResponse オブジェクトを使用してユーザーの名前と電子メール アドレスを出力します。
概要
PHP アプリケーションでは、gRPC を使用すると、同時多発 API リクエストを適切に処理できます。 gRPC が提供するツールを使用して、サービス コードを生成し、PHP コードでサービスとクライアントを作成できます。高負荷のネットワーク アプリケーションに直面する場合、HTTP/2 プロトコルに基づく効率的な RPC を使用して高速で信頼性の高い通信を実現するには、gRPC が良い選択肢となります。
以上がPHP で gRPC を使用して同時実行性の高い API を処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。