ホームページ >バックエンド開発 >PHPチュートリアル >PHP で gRPC を使用して同時実行性の高い API を処理する方法

PHP で gRPC を使用して同時実行性の高い API を処理する方法

王林
王林オリジナル
2023-06-17 16:46:472552ブラウズ

最新のネットワーク アプリケーションでは、高い同時実行性への対応は非常に重要な問題です。このプロセスでは、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 サイトの他の関連記事を参照してください。

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