gRPC para JavaScript (Node.js): bibliotecas e exemplos
gRPC é um framework de alto desempenho para chamada remota de procedimentos (RPC), desenvolvido pelo Google. Ele utiliza Protocol Buffers (protobuf) para serialização de dados e HTTP/2 para transporte. No ecossistema Node.js, o gRPC permite criar microsserviços rápidos e confiáveis com suporte a transmissão bidirecional. Neste artigo, abordaremos as principais bibliotecas, instalação e criaremos um exemplo funcional de servidor e cliente.
Principais bibliotecas para gRPC no Node.js
Para trabalhar com gRPC no ambiente Node.js, existem vários pacotes essenciais:
@grpc/grpc-js— implementação pura do gRPC em JavaScript. Não requer dependências nativas (C++), simplificando a instalação. Recomendado para a maioria dos projetos modernos.@grpc/proto-loader— carregador de arquivos.proto. Converte definições protobuf em objetos JavaScript para uso com@grpc/grpc-js.protobufjs— biblioteca alternativa para trabalhar com protobuf. Suporta geração de código estática e dinâmica.grpc-tools— ferramentas de CLI para gerar código JavaScript a partir de arquivos.proto(alternativa ao carregamento dinâmico).
Neste guia, usaremos a combinação @grpc/grpc-js e @grpc/proto-loader — uma abordagem moderna e estável.
Instalação das dependências
Crie um novo projeto e instale os pacotes necessários:
mkdir grpc-node-examplecd grpc-node-examplenpm init -ynpm install @grpc/grpc-js @grpc/proto-loaderDefinição do serviço através do arquivo .proto
Crie o arquivo hello.proto com a descrição do serviço e das mensagens:
syntax = "proto3";
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply) {} rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}}
message HelloRequest { string name = 1;}
message HelloReply { string message = 1;}Aqui definimos dois métodos: o unário simples SayHello e o streaming do servidor SayHelloStream.
Implementação do servidor gRPC no Node.js
Crie o arquivo server.js:
const grpc = require('@grpc/grpc-js');const protoLoader = require('@grpc/proto-loader');
const PROTO_PATH = './hello.proto';
// Carrega a definição do arquivo protoconst packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true});
const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;
// Implementação dos métodos do serviçofunction sayHello(call, callback) { const name = call.request.name; console.log(`Requisição recebida: ${name}`); callback(null, { message: `Olá, ${name}!` });}
function sayHelloStream(call) { const name = call.request.name; console.log(`Streaming para: ${name}`);
// Envia várias respostas for (let i = 0; i < 5; i++) { call.write({ message: `Olá ${name} - mensagem ${i + 1}` }); } call.end();}
// Inicialização do servidorfunction main() { const server = new grpc.Server(); server.addService(helloProto.Greeter.service, { sayHello: sayHello, sayHelloStream: sayHelloStream });
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => { console.log('Servidor gRPC rodando na porta 50051'); server.start(); });}
main();Implementação do cliente gRPC no Node.js
Crie o arquivo client.js:
const grpc = require('@grpc/grpc-js');const protoLoader = require('@grpc/proto-loader');
const PROTO_PATH = './hello.proto';
const packageDefini Também na biblioteca
gRPC para Go (Golang): bibliotecas, exemplos e guia prático
Cliente Redis para PHP: Predis e PhpRedis – conexão e exemplos
Biblioteca WebSocket Ratchet para PHP: criando tempo real no site
GraphQL em Kotlin: Visão geral das bibliotecas e ferramentas para desenvolvimento de servidor
LeakCanary para Kotlin: guia completo com exemplos práticos