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-loaderDefinició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 También en la biblioteca
Trabajo con archivos ZIP en Kotlin: creación, lectura y descompresión
Validación de datos en JavaScript (Node.js): Joi, Yup, Zod
Planificador de tareas Java: Quartz Scheduler – guía completa
Colas de tareas para PHP: RabbitMQ, Gearman y Redis