gRPC para JavaScript (Node.js): bibliotecas e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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-loader


Definiçã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

Recommendations