gRPC para PHP: bibliotecas y ejemplos de implementación
gRPC (gRPC Remote Procedure Calls) es un framework de alto rendimiento para llamadas a procedimientos remotos, desarrollado por Google. Utiliza Protocol Buffers (protobuf) como lenguaje de descripción de interfaces y serialización de datos. A diferencia de REST, gRPC funciona sobre HTTP/2, soporta transmisión bidireccional y proporciona tipado estricto. En este artículo, analizaremos cómo conectar gRPC en PHP, qué bibliotecas usar y escribiremos un ejemplo completo de interacción cliente-servidor.
Resumen de bibliotecas para gRPC en PHP
Para trabajar con gRPC en PHP, hay dos enfoques principales:
- Extensión grpc.so — la extensión C oficial de gRPC. Ofrece el máximo rendimiento, pero requiere compilación y configuración en el servidor.
- Cliente PHP puro (por ejemplo,
grpc/grpca través de Composer) — una implementación en PHP que funciona mediante cURL y HTTP/2. Es más lento, pero más fácil de implementar.
Para producción, se recomienda usar la extensión grpc, mientras que para desarrollo o pruebas, el cliente PHP puro.
Instalación de los componentes necesarios
1. Instalación de protoc y el plugin para PHP
Descargue el compilador protobuf desde el repositorio oficial para su sistema operativo. Para generar código PHP, necesitará el plugin protoc-gen-php-grpc:
# Instalación de 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
# Instalación del plugin para gRPC PHPsudo apt-get install php-dev php-cli php-pearsudo pecl install grpcsudo pecl install protobuf2. Instalación de dependencias de Composer
Cree un proyecto y agregue los paquetes necesarios:
composer initcomposer require grpc/grpccomposer require google/protobufCreación del archivo .proto
Definamos un servicio simple para trabajar con usuarios. Cree el archivo 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 {}Generación de código PHP a partir de .proto
Ejecute el comando para compilar el .proto en clases PHP:
protoc --php_out=./generated --grpc_out=./generated \ --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin \ user.protoEn la carpeta generated aparecerán los archivos:
GPBMetadata/User.php— metadatos del archivo protoUser/UserRequest.php— clase de solicitudUser/UserResponse.php— clase de respuestaUser/UserServiceClient.php— cliente para llamar al servicio
Implementación del servidor gRPC en PHP
Para la parte del servidor, usamos la extensión oficial grpc. Cree el archivo 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 También en la biblioteca
unbuild para TypeScript: guía completa con ejemplos prácticos
Trabajo con Excel en Go (Golang): bibliotecas Excelize, xlsx, tealeg
Pruebas en JavaScript (Node.js): frameworks y herramientas