gRPC para PHP: bibliotecas, instalación y ejemplos de implementación

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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/grpc a 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 protobuf


2. Instalación de dependencias de Composer



Cree un proyecto y agregue los paquetes necesarios:



composer initcomposer require grpc/grpccomposer require google/protobuf


Creació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.proto


En la carpeta generated aparecerán los archivos:

  • GPBMetadata/User.php — metadatos del archivo proto
  • User/UserRequest.php — clase de solicitud
  • User/UserResponse.php — clase de respuesta
  • User/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

Recommendations