gRPC para PHP: bibliotecas y ejemplos
gRPC es un framework moderno de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google. Utiliza HTTP/2 para el transporte, Protocol Buffers (protobuf) para la serialización de datos y admite múltiples lenguajes, incluido PHP. En este artículo, veremos cómo conectar gRPC a un proyecto PHP, qué bibliotecas son necesarias y escribiremos un ejemplo funcional de interacción cliente-servidor.
¿Por qué es necesario gRPC en PHP?
Las API REST tradicionales a menudo funcionan con JSON y HTTP/1.1, lo que genera redundancia de datos y serialización lenta. gRPC resuelve estos problemas:
- Protocolo binario — protobuf ocupa menos espacio que JSON y se procesa más rápido.
- HTTP/2 — multiplexación, compresión de encabezados, transmisión por flujos.
- Tipado estricto — los contratos se describen en archivos .proto, lo que simplifica el desarrollo y la depuración.
- Transmisión bidireccional por flujos — el servidor y el cliente pueden intercambiar datos de forma asíncrona.
Bibliotecas principales para gRPC en PHP
Para trabajar con gRPC en PHP se necesitan dos componentes:
- grpc.so — extensión de PHP (extensión C) que implementa HTTP/2 y el protocolo gRPC.
- protobuf.so — extensión para la serialización de protobuf (alternativa: el paquete PHP puro
google/protobuf). - Paquetes de Composer:
grpc/grpcygoogle/protobuf.
La forma recomendada de instalación es a través de PECL (extensiones) y Composer (dependencias).
Instalación de gRPC y protobuf
Para servidores Linux (Ubuntu/Debian):
# Instalamos las extensiones a través de PECLsudo pecl install grpcsudo pecl install protobuf
# Agregamos a php.iniecho "extension=grpc.so" >> /etc/php/8.2/cli/php.iniecho "extension=protobuf.so" >> /etc/php/8.2/cli/php.iniPara Windows, descargue los archivos DLL desde PECL e indíquelos en php.ini.
A continuación, instalamos las bibliotecas a través de Composer:
composer require grpc/grpccomposer require google/protobufCreación del archivo .proto
Describamos un servicio para trabajar con usuarios. Cree el archivo user.proto:
syntax = "proto3";
package user;
service UserService { rpc GetUser (UserRequest) returns (UserResponse); rpc ListUsers (Empty) returns (UserList);}
message UserRequest { int32 id = 1;}
message UserResponse { int32 id = 1; string name = 2; string email = 3;}
message Empty {}
message UserList { repeated UserResponse users = 1;}Generación de clases PHP a partir de .proto
Instale protoc y el plugin para PHP:
# Descargue protoc desde https://github.com/protocolbuffers/protobuf/releases# Luego genere el código:protoc --php_out=./generated --grpc_out=./generated --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.protoEn la carpeta generated aparecerán las clases: UserRequest, UserResponse, UserServiceClient, entre otras.
Ejemplo de servidor gRPC en PHP
Creemos un servidor que responda a las solicitudes. Archivo server.php:
require_once __DIR__ . '/vendor/autoload.php';require_once __DIR__ . '/generated/UserServiceServer.php';
use Grpc\\Server;use User\\UserServiceServer;use User\\UserRequest;use User\\UserResponse;
class MyUserService extends UserServiceServer{ public function GetUser(\\Grpc\\ServerCallReader $request, \\Grpc\\ServerCallWriter $response, \\Grpc\\ServerContext $context): void { $req = $request->read(); $id = $req->getId();
$user = new UserResponse(); $user->setId($id); $ También en la biblioteca
Gestión de configuración de aplicaciones TypeScript: guía completa
Aprendizaje automático en JavaScript: bibliotecas para Node.js — revisión y ejemplos
Log4j 2 / SLF4J para Java: guía completa con ejemplos
Cliente HTTP para C++: las mejores bibliotecas para trabajar con la red
Serialización de objetos en C++: bibliotecas, métodos y ejemplos de código