Heim >Backend-Entwicklung >PHP-Tutorial >So verwenden Sie gRPC in PHP, um APIs mit hoher Parallelität zu verarbeiten
In modernen Netzwerkanwendungen ist der Umgang mit hoher Parallelität ein sehr wichtiges Thema. In diesem Prozess kann die Verwendung von gRPC eine hervorragende Möglichkeit sein, eine effiziente Client-Server-Kommunikation über Remote Procedure Calls (RPC) zu erreichen. In PHP-Anwendungen können wir gRPC verwenden, um viele gleichzeitige API-Anfragen zu verarbeiten. In diesem Artikel wird erläutert, wie Sie mit gRPC APIs mit hoher Parallelität in PHP verarbeiten.
Was ist gRPC?
gRPC ist ein von Google entwickeltes Hochleistungs-RPC-Framework. Es unterstützt mehrere Sprachen und kann in Anwendungen verwendet werden, die auf mehreren Plattformen basieren. gRPC basiert auf dem HTTP/2-Protokoll und kann große Datenmengen schnell und zuverlässig über das Netzwerk übertragen. Es unterstützt auch bidirektionales Streaming und ermöglicht so echtes Streaming zwischen Server und Client.
Verwenden von gRPC in PHP
Um gRPC in PHP verwenden zu können, müssen wir die gRPC-Erweiterung installieren. Informationen zum Installationsprozess finden Sie in der gRPC-Dokumentation (https://grpc.io/docs/linguals/php/quickstart/).
Sobald die gRPC-Erweiterung installiert ist, können wir mit dem Schreiben des gRPC-Dienstes beginnen. In gRPC werden Dienste über Protodateien definiert. Die Protodatei beschreibt die Datenstruktur und die Serviceschnittstelle und kann mit den von gRPC bereitgestellten Tools entsprechenden Code für die Verwendung durch PHP generieren.
In diesem Artikel zeigen wir anhand eines einfachen Beispiels, wie man gRPC in PHP verwendet, um viele gleichzeitige API-Anfragen zu verarbeiten. In diesem Beispiel implementieren wir eine API zum Erstellen und Abrufen von Benutzern. Wir müssen eine Protodatei definieren, um diesen Dienst zu beschreiben:
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; }
In dieser Protodatei definieren wir einen UserService-Dienst, der über zwei Methoden getUser und createUser verfügt. Die getUser-Methode erfordert ein GetUserRequest-Objekt als Parameter und gibt ein GetUserResponse-Objekt zurück; die createUser-Methode erfordert ein CreateUserRequest-Objekt als Parameter und gibt ein CreateUserResponse-Objekt zurück. Wir können die von gRPC bereitgestellten Tools verwenden, um diese Protodatei in PHP-Code zu kompilieren:
protoc --php_out=./gen --grpc_out=./gen --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
Dieser Befehl kompiliert die Protodatei in PHP-Code und platziert den generierten Code im gen-Verzeichnis. Wir können diese generierten Codes in PHP-Code verwenden, um gRPC-Dienste zu implementieren:
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');
In diesem PHP-Code implementieren wir eine UserServiceImpl-Klasse, die von der userUserServiceServer-Klasse erbt. Diese Klasse implementiert die Methoden getUser und createUser und verarbeitet Anfragen. Für jede Anfrage erstellt gRPC eine neue UserServiceImpl-Instanz und übergibt ihr beim Aufruf der Methode den Kontextparameter. Um den gRPC-Dienst zu starten, müssen wir ein neues Serverobjekt erstellen, den Dienst zum Server hinzufügen und den Server an die Adresse und den Port binden.
Die Verwendung von gRPC mit einem PHP-Client
Die Verwendung von gRPC mit einem PHP-Client ist ebenfalls einfach. Wir können den von gRPC bereitgestellten Codegenerator verwenden, um PHP-Code auf dem Client zum Aufrufen von gRPC-Diensten zu generieren. Die vom Codegenerator benötigte Eingabe ist eine .proto-Datei und das Flag --php_out.
In unserem Beispiel haben wir die .proto-Datei geschrieben. Wir können es mit dem folgenden Befehl als PHP-Code generieren:
protoc --php_out=./gen --grpc_out=./gen --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
Dieser Befehl generiert ein Benutzerverzeichnis im gen-Verzeichnis, das die PHP-Dateien enthält, die für die Kommunikation mit dem gRPC-Dienst erforderlich sind.
Importieren Sie diese Dateien in unseren PHP-Client und wir können sie verwenden, um den Dienst aufzurufen:
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() . " ";
In diesem PHP-Clientcode erstellen wir ein neues UserServiceClient-Objekt und binden es an die Serveradresse und den Port. Wir erstellen außerdem ein GetUserRequest-Objekt, setzen die Benutzer-ID auf 123 und rufen die getUser-Methode mit $client auf. Wir warten auf die Antwort und verwenden das zurückgegebene GetUserResponse-Objekt, um den Namen und die E-Mail-Adresse des Benutzers auszugeben.
Zusammenfassung
In PHP-Anwendungen können viele gleichzeitige API-Anfragen gut mit gRPC verarbeitet werden. Wir können die von gRPC bereitgestellten Tools verwenden, um Servicecode zu generieren und Services und Clients in PHP-Code zu erstellen. Wenn wir mit Netzwerkanwendungen mit hoher Auslastung konfrontiert sind, kann gRPC eine gute Wahl sein, um eine schnelle und zuverlässige Kommunikation zu erreichen, indem effizientes RPC basierend auf dem HTTP/2-Protokoll verwendet wird.
Das obige ist der detaillierte Inhalt vonSo verwenden Sie gRPC in PHP, um APIs mit hoher Parallelität zu verarbeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!