gRPC para JavaScript (Node.js): bibliotecas y ejemplos de código

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 JavaScript (Node.js): bibliotecas y ejemplos



gRPC es un framework de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google. Utiliza Protocol Buffers (protobuf) para la serialización de datos y HTTP/2 para el transporte. En el ecosistema de Node.js, gRPC permite crear microservicios rápidos y confiables con soporte para transmisión bidireccional. En este artículo, analizaremos las bibliotecas principales, la instalación y escribiremos un ejemplo funcional de servidor y cliente.



Bibliotecas principales para gRPC en Node.js



Para trabajar con gRPC en el entorno Node.js, existen varios paquetes clave:



  • @grpc/grpc-js — una implementación pura de gRPC en JavaScript. No requiere dependencias nativas (C++), lo que simplifica la instalación. Recomendado para la mayoría de los proyectos modernos.
  • @grpc/proto-loader — cargador de archivos .proto. Convierte definiciones de protobuf en objetos JavaScript para usar con @grpc/grpc-js.
  • protobufjs — biblioteca alternativa para trabajar con protobuf. Admite tanto generación de código estática como dinámica.
  • grpc-tools — herramientas CLI para generar código JavaScript a partir de archivos .proto (alternativa a la carga dinámica).


En esta guía, usaremos la combinación de @grpc/grpc-js y @grpc/proto-loader, que es un enfoque moderno y estable.



Instalación de dependencias



Cree un nuevo proyecto e instale los paquetes necesarios:



mkdir grpc-node-examplecd grpc-node-examplenpm init -ynpm install @grpc/grpc-js @grpc/proto-loader


Definición del servicio a través del archivo .proto



Cree un archivo hello.proto con la descripción del servicio y los mensajes:



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;}


Aquí hemos definido dos métodos: el unario simple SayHello y el streaming del servidor SayHelloStream.



Implementación del servidor gRPC en Node.js



Cree un archivo server.js:



const grpc = require('@grpc/grpc-js');const protoLoader = require('@grpc/proto-loader');

const PROTO_PATH = './hello.proto';

// Cargamos la definición del archivo protoconst packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true});

const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;

// Implementación de los métodos del serviciofunction sayHello(call, callback) { const name = call.request.name; console.log(`Solicitud recibida: ${name}`); callback(null, { message: `¡Hola, ${name}!` });}

function sayHelloStream(call) { const name = call.request.name; console.log(`Transmitiendo para: ${name}`);

// Enviamos varias respuestas for (let i = 0; i < 5; i++) { call.write({ message: `Hola ${name} - mensaje ${i + 1}` }); } call.end();}

// Inicio del 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 ejecutándose en el puerto 50051'); server.start(); });}

main();


Implementación del cliente gRPC en Node.js



Cree un archivo client.js:



const grpc = require('@grpc/grpc-js');const protoLoader = require('@grpc/proto-loader');

const PROTO_PATH = './hello.proto';

const packageDefini

Recommendations