gRPC für PHP: Bibliotheken und Beispiele
\n\ngRPC 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\nWarum gRPC in PHP?
\nTraditionelle 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
Wichtige Bibliotheken für gRPC in PHP
\nFü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/grpcundgoogle/protobuf. \n
Die empfohlene Installationsmethode ist über PECL (Erweiterungen) und Composer (Abhängigkeiten).
\n\nInstallation von gRPC und protobuf
\nFü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\nFür Windows laden Sie die DLL-Dateien von PECL herunter und geben Sie sie in der php.ini an.
\n\nAnschließend installieren Sie die Bibliotheken über Composer:
\ncomposer require grpc/grpc\ncomposer require google/protobuf\n\nErstellen einer .proto-Datei
\nBeschreiben wir einen Dienst für die Benutzerverwaltung. Erstellen Sie die Datei user.proto:
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\nGenerierung von PHP-Klassen aus .proto
\nInstallieren 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\nIm Ordner generated erscheinen die Klassen: UserRequest, UserResponse, UserServiceClient usw.
Beispiel eines gRPC-Servers in PHP
\nErstellen wir einen Server, der auf Anfragen antwortet. Datei server.php:
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 $ Auch in der Bibliothek
Arbeit mit XML in JavaScript (Node.js): Bibliotheken und Beispiele
Twig für PHP: Komplette Anleitung mit Beispielen
ShareLink für Swift: Vollständige Anleitung mit Beispielen
SMS-Versand mit Java: Überblick über API-Bibliotheken und Tools
ORM für C# (.NET): Vergleich von Entity Framework, Dapper und NHibernate