gRPC für JavaScript (Node.js): Bibliotheken und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

gRPC für JavaScript (Node.js): Bibliotheken und Beispiele



gRPC ist ein von Google entwickeltes Hochleistungs-Framework für entfernte Prozeduraufrufe (RPC). Es verwendet Protocol Buffers (protobuf) zur Datenserialisierung und HTTP/2 für den Transport. In der Node.js-Ökosystem ermöglicht gRPC die Erstellung schneller und zuverlässiger Microservices mit Unterstützung für bidirektionales Streaming. In diesem Artikel werden wir die wichtigsten Bibliotheken, die Installation und ein funktionierendes Beispiel für Server und Client durchgehen.



Wichtige Bibliotheken für gRPC in Node.js



Für die Arbeit mit gRPC in der Node.js-Umgebung gibt es mehrere wichtige Pakete:



  • @grpc/grpc-js — eine reine JavaScript-Implementierung von gRPC. Erfordert keine nativen Abhängigkeiten (C++), was die Installation vereinfacht. Für die meisten modernen Projekte empfohlen.
  • @grpc/proto-loader — ein Lader für .proto-Dateien. Wandelt protobuf-Definitionen in JavaScript-Objekte zur Verwendung mit @grpc/grpc-js um.
  • protobufjs — eine alternative Bibliothek für die Arbeit mit protobuf. Unterstützt sowohl statische als auch dynamische Codegenerierung.
  • grpc-tools — CLI-Tools zur Generierung von JavaScript-Code aus .proto-Dateien (Alternative zum dynamischen Laden).


In dieser Anleitung verwenden wir die Kombination aus @grpc/grpc-js und @grpc/proto-loader – ein moderner und stabiler Ansatz.



Installation der Abhängigkeiten



Erstellen Sie ein neues Projekt und installieren Sie die erforderlichen Pakete:



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


Definition des Dienstes über eine .proto-Datei



Erstellen Sie eine Datei hello.proto mit der Beschreibung des Dienstes und der Nachrichten:



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


Hier haben wir zwei Methoden definiert: den einfachen unären SayHello und das serverseitige Streaming SayHelloStream.



Implementierung des gRPC-Servers in Node.js



Erstellen Sie eine Datei server.js:



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

const PROTO_PATH = './hello.proto';

// Laden der Proto-Datei-Definitionconst packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true});

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

// Implementierung der Dienstmethodenfunction sayHello(call, callback) { const name = call.request.name; console.log(`Received request: ${name}`); callback(null, { message: `Hello, ${name}!` });}

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

// Senden mehrerer Antworten for (let i = 0; i < 5; i++) { call.write({ message: `Hello ${name} - message ${i + 1}` }); } call.end();}

// Server startenfunction 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('gRPC server running on port 50051'); server.start(); });}

main();


Implementierung des gRPC-Clients in Node.js



Erstellen Sie eine Datei client.js:



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

const PROTO_PATH = './hello.proto';

const packageDefini

Empfehlungen