gRPC für PHP: Bibliotheken, Installation und Codebeispiele

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 Beispiele

\n\n

gRPC ist ein modernes, hochleistungsfähiges Framework für entfernte Prozeduraufrufe (RPC), entwickelt von Google. Es verwendet HTTP/2 für den Transport, Protocol Buffers (protobuf) für die Datenserialisierung und unterstützt viele Sprachen, einschließlich PHP. In diesem Artikel werden wir uns ansehen, wie man gRPC in ein PHP-Projekt einbindet, welche Bibliotheken benötigt werden und ein funktionierendes Beispiel für eine Client-Server-Kommunikation schreiben.

\n\n

Warum gRPC in PHP?

\n

Traditionelle REST-APIs arbeiten oft mit JSON und HTTP/1.1, was zu Datenredundanz und langsamer Serialisierung führt. gRPC löst diese Probleme:

\n
    \n
  • Binäres Protokoll — protobuf benötigt weniger Speicherplatz als JSON und wird schneller verarbeitet.
  • \n
  • HTTP/2 — Multiplexing, Header-Komprimierung, Streaming.
  • \n
  • Starke Typisierung — Verträge werden in .proto-Dateien beschrieben, was Entwicklung und Debugging vereinfacht.
  • \n
  • Bidirektionales Streaming — Server und Client können asynchron Daten austauschen.
  • \n
\n\n

Wichtige Bibliotheken für gRPC in PHP

\n

Für die Arbeit mit gRPC in PHP werden zwei Komponenten benötigt:

\n
    \n
  • grpc.so — PHP-Erweiterung (C-Erweiterung), die HTTP/2 und das gRPC-Protokoll implementiert.
  • \n
  • protobuf.so — Erweiterung für die protobuf-Serialisierung (Alternative: das reine PHP-Paket google/protobuf).
  • \n
  • Composer-Pakete: grpc/grpc und google/protobuf.
  • \n
\n\n

Die empfohlene Installationsmethode ist über PECL (Erweiterungen) und Composer (Abhängigkeiten).

\n\n

Installation von gRPC und protobuf

\n

Für Server unter Linux (Ubuntu/Debian):

\n
# Erweiterungen über PECL installieren\nsudo pecl install grpc\nsudo pecl install protobuf\n\n# In php.ini hinzufügen\necho "extension=grpc.so" >> /etc/php/8.2/cli/php.ini\necho "extension=protobuf.so" >> /etc/php/8.2/cli/php.ini
\n\n

Für Windows laden Sie die DLL-Dateien von PECL herunter und geben Sie sie in der php.ini an.

\n\n

Anschließend installieren Sie die Bibliotheken über Composer:

\n
composer require grpc/grpc\ncomposer require google/protobuf
\n\n

Erstellen einer .proto-Datei

\n

Beschreiben wir einen Dienst für die Benutzerverwaltung. Erstellen Sie die Datei user.proto:

\n
syntax = "proto3";\n\npackage user;\n\nservice UserService {\n    rpc GetUser (UserRequest) returns (UserResponse);\n    rpc ListUsers (Empty) returns (UserList);\n}\n\nmessage UserRequest {\n    int32 id = 1;\n}\n\nmessage UserResponse {\n    int32 id = 1;\n    string name = 2;\n    string email = 3;\n}\n\nmessage Empty {}\n\nmessage UserList {\n    repeated UserResponse users = 1;\n}
\n\n

Generierung von PHP-Klassen aus .proto

\n

Installieren Sie protoc und das Plugin für PHP:

\n
# Laden Sie protoc von https://github.com/protocolbuffers/protobuf/releases herunter\n# Generieren Sie dann den Code:\nprotoc --php_out=./generated --grpc_out=./generated --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
\n\n

Im Ordner generated erscheinen die Klassen: UserRequest, UserResponse, UserServiceClient usw.

\n\n

Beispiel eines gRPC-Servers in PHP

\n

Erstellen wir einen Server, der auf Anfragen antwortet. Datei server.php:

\n
require_once __DIR__ . '/vendor/autoload.php';\nrequire_once __DIR__ . '/generated/UserServiceServer.php';\n\nuse Grpc\\Server;\nuse User\\UserServiceServer;\nuse User\\UserRequest;\nuse User\\UserResponse;\n\nclass MyUserService extends UserServiceServer\n{\n    public function GetUser(\\Grpc\\ServerCallReader $request, \\Grpc\\ServerCallWriter $response, \\Grpc\\ServerContext $context): void\n    {\n        $req = $request->read();\n        $id = $req->getId();\n\n        $user = new UserResponse();\n        $user->setId($id);\n        $                    

Empfehlungen