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-jsum.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-loaderDefinition 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 Auch in der Bibliothek
ORM für Swift (iOS/macOS): Vergleich und Anwendungsbeispiele
JWT-Tokens in PHP: Vollständiger Leitfaden zur Authentifizierung und Autorisierung
Rate Limiting in PHP: Vollständiger Leitfaden zur Anfragenbegrenzung
Arbeit mit YAML in Java: Bibliotheken SnakeYAML und Jackson