gRPC für PHP: Bibliotheken, Installation und Implementierungsbeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

gRPC für PHP: Bibliotheken und Implementierungsbeispiele



gRPC (gRPC Remote Procedure Calls) ist ein von Google entwickeltes Hochleistungs-Framework für entfernte Prozeduraufrufe. Es verwendet Protocol Buffers (protobuf) als Schnittstellenbeschreibungssprache und zur Datenserialisierung. Im Gegensatz zu REST arbeitet gRPC über HTTP/2, unterstützt bidirektionales Streaming und gewährleistet eine strenge Typisierung. In diesem Artikel werden wir erläutern, wie man gRPC in PHP einbindet, welche Bibliotheken verwendet werden, und ein vollständiges Beispiel für eine Client-Server-Kommunikation erstellen.



Überblick über Bibliotheken für gRPC in PHP



Für die Arbeit mit gRPC in PHP stehen zwei Hauptansätze zur Verfügung:



  • Die Erweiterung grpc.so — die offizielle C-Erweiterung von gRPC. Bietet maximale Leistung, erfordert jedoch Kompilierung und Konfiguration auf dem Server.
  • Reiner PHP-Client (z. B. grpc/grpc über Composer) — eine PHP-Implementierung, die über cURL und HTTP/2 arbeitet. Langsamer, aber einfacher bereitzustellen.


Für die Produktion wird die Verwendung der Erweiterung grpc empfohlen, für Entwicklung oder Tests der reine PHP-Client.



Installation der erforderlichen Komponenten



1. Installation von protoc und des Plugins für PHP



Laden Sie den protobuf-Compiler aus dem offiziellen Repository für Ihr Betriebssystem herunter. Für die Generierung von PHP-Code wird das Plugin protoc-gen-php-grpc benötigt:



# Installation von protoc (Linux)wget https://github.com/protocolbuffers/protobuf/releases/download/v25.0/protoc-25.0-linux-x86_64.zipunzip protoc-25.0-linux-x86_64.zip -d /usr/local/protocexport PATH=$PATH:/usr/local/protoc/bin

# Installation des Plugins für gRPC PHPsudo apt-get install php-dev php-cli php-pearsudo pecl install grpcsudo pecl install protobuf


2. Installation der Composer-Abhängigkeiten



Erstellen Sie ein Projekt und fügen Sie die erforderlichen Pakete hinzu:



composer initcomposer require grpc/grpccomposer require google/protobuf


Erstellen einer .proto-Datei



Definieren wir einen einfachen Dienst für die Arbeit mit Benutzern. Erstellen Sie die Datei user.proto:



syntax = "proto3";

package user;

service UserService { rpc GetUser (UserRequest) returns (UserResponse); rpc ListUsers (Empty) returns (stream UserResponse);}

message UserRequest { int32 id = 1;}

message UserResponse { int32 id = 1; string name = 2; string email = 3;}

message Empty {}


Generierung von PHP-Code aus .proto



Führen Sie den Befehl zum Kompilieren der .proto-Datei in PHP-Klassen aus:



protoc --php_out=./generated --grpc_out=./generated \       --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin \       user.proto


Im Ordner generated erscheinen die folgenden Dateien:

  • GPBMetadata/User.php — Metadaten der Proto-Datei
  • User/UserRequest.php — Klasse der Anfrage
  • User/UserResponse.php — Klasse der Antwort
  • User/UserServiceClient.php — Client zum Aufrufen des Dienstes


Implementierung eines gRPC-Servers in PHP



Für den Serverteil verwenden wir die offizielle grpc-Erweiterung. Erstellen Sie die Datei server.php:



<?phprequire_once __DIR__ . '/vendor/autoload.php';require_once __DIR__ . '/generated/User/UserServiceInterface.php';require_once __DIR__ . '/generated/User/UserServiceServer.php';

use Grpc\\Server;use User\\UserRequest;use User\\UserResponse;use User\\UserServiceServer;

class MyUserService extends UserServiceServer{ public function GetUser(\\User\\UserRequest $request): \\User\\UserResponse { $response = new UserResponse(); $response->setId($request->getId()); $response->setName('John Doe'); $response->setEmail('john@exa

Empfehlungen