gRPC para PHP: bibliotecas e exemplos de implementação
gRPC (gRPC Remote Procedure Calls) é um framework de alto desempenho para chamadas de procedimentos remotos, desenvolvido pelo Google. Ele utiliza Protocol Buffers (protobuf) como linguagem de descrição de interfaces e serialização de dados. Diferente do REST, o gRPC opera sobre HTTP/2, suporta streaming bidirecional e oferece tipagem estrita. Neste artigo, vamos abordar como conectar o gRPC em PHP, quais bibliotecas usar e escrever um exemplo completo de interação cliente-servidor.
Visão geral das bibliotecas para gRPC em PHP
Para trabalhar com gRPC em PHP, existem duas abordagens principais:
- Extensão grpc.so — extensão C oficial do gRPC. Oferece desempenho máximo, mas requer compilação e configuração no servidor.
- Cliente PHP puro (por exemplo,
grpc/grpcvia Composer) — implementação em PHP que funciona através de cURL e HTTP/2. Mais lento, porém mais fácil de implantar.
Para produção, recomenda-se usar a extensão grpc; para desenvolvimento ou testes, o cliente PHP puro.
Instalação dos componentes necessários
1. Instalação do protoc e do plugin para PHP
Baixe o compilador protobuf do repositório oficial para o seu sistema operacional. Para gerar código PHP, será necessário o plugin protoc-gen-php-grpc:
# Instalação do 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
# Instalação do plugin para gRPC PHPsudo apt-get install php-dev php-cli php-pearsudo pecl install grpcsudo pecl install protobuf2. Instalação das dependências do Composer
Crie um projeto e adicione os pacotes necessários:
composer initcomposer require grpc/grpccomposer require google/protobufCriação do arquivo .proto
Vamos definir um serviço simples para trabalhar com usuários. Crie o arquivo 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 {}Geração de código PHP a partir do .proto
Execute o comando para compilar o .proto em classes PHP:
protoc --php_out=./generated --grpc_out=./generated \ --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin \ user.protoNa pasta generated, aparecerão os arquivos:
GPBMetadata/User.php— metadados do arquivo protoUser/UserRequest.php— classe de requisiçãoUser/UserResponse.php— classe de respostaUser/UserServiceClient.php— cliente para chamar o serviço
Implementação do servidor gRPC em PHP
Para a parte do servidor, use a extensão oficial grpc. Crie o arquivo 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 Também na biblioteca
Envio de Email em JavaScript (Node.js) — Bibliotecas e Exemplos de Código
Valgrind para C++: guia completo com exemplos práticos
Aprendizado de Máquina em C# (.NET): visão geral das bibliotecas ML.NET, Accord.NET, TensorFlow.NET
Autorização e autenticação em PHP: guia completo com exemplos
Serialização de objetos em Kotlin: bibliotecas e exemplos de código