gRPC pour JavaScript (Node.js) : bibliothèques, configuration et exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour JavaScript (Node.js) : bibliothèques et exemples

\n\n

gRPC est un framework haute performance pour l'appel de procédures à distance (RPC), développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 pour le transport. Dans l'écosystème Node.js, gRPC permet de créer des microservices fiables avec un typage strict, la prise en charge du streaming et de la communication bidirectionnelle. Dans cet article, nous examinerons les principales bibliothèques pour travailler avec gRPC en JavaScript (Node.js) et analyserons un exemple pratique de serveur et de client.

\n\n

Bibliothèques principales pour gRPC dans Node.js

\n\n

Pour travailler avec gRPC dans Node.js, deux paquets principaux sont utilisés :

\n\n
    \n
  • @grpc/grpc-js — une implémentation pure JavaScript de gRPC. Elle ne nécessite pas de dépendances natives, fonctionne sur toutes les plateformes et prend en charge toutes les fonctionnalités de gRPC (appels unaires, streaming serveur et client, streaming bidirectionnel).
  • \n
  • @grpc/proto-loader — un utilitaire pour charger les fichiers .proto à l'exécution. Il permet de créer dynamiquement des objets JavaScript à partir des définitions Protobuf.
  • \n
\n\n

Pour compiler les fichiers .proto en modules statiques, on peut utiliser grpc-tools (partie de grpc-tools), mais dans les projets modernes, on préfère souvent le chargement dynamique via @grpc/proto-loader.

\n\n

Installation des dépendances

\n\n
npm install @grpc/grpc-js @grpc/proto-loader
\n\n

Exemple : définition d'un fichier Proto

\n\n

Créons un fichier helloworld.proto avec un service simple :

\n\n
syntax = "proto3";\n\npackage helloworld;\n\nservice Greeter {\n  rpc SayHello (HelloRequest) returns (HelloReply) {}\n}\n\nmessage HelloRequest {\n  string name = 1;\n}\n\nmessage HelloReply {\n  string message = 1;\n}
\n\n

Partie serveur (Node.js)

\n\n

Créons un fichier server.js :

\n\n
const grpc = require('@grpc/grpc-js');\nconst protoLoader = require('@grpc/proto-loader');\nconst path = require('path');\n\nconst PROTO_PATH = path.join(__dirname, 'helloworld.proto');\n\nconst packageDefinition = protoLoader.loadSync(PROTO_PATH, {\n  keepCase: true,\n  longs: String,\n  enums: String,\n  defaults: true,\n  oneofs: true\n});\n\nconst helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;\n\nfunction sayHello(call, callback) {\n  const name = call.request.name || 'Invité';\n  callback(null, { message: `Bonjour, ${name} !` });\n}\n\nfunction main() {\n  const server = new grpc.Server();\n  server.addService(helloProto.Greeter.service, { sayHello: sayHello });\n  server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {\n    console.log('Serveur gRPC démarré sur le port 50051');\n    server.start();\n  });\n}\n\nmain();
\n\n

Partie cliente (Node.js)

\n\n

Créons un fichier client.js :

\n\n
const grpc = require('@grpc/grpc-js');\nconst protoLoader = require('@grpc/proto-loader');\nconst path = require('path');\n\nconst PROTO_PATH = path.join(__dirname, 'helloworld.proto');\n\nconst packageDefinition = protoLoader.loadSync(PROTO_PATH, {\n  keepCase: true,\n  longs: String,\n  enums: String,\n  defaults: true,\n  oneofs: true\n});\n\nconst helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;\n\nfunction main() {\n  const client = new helloProto.Greeter('localhost:50051',\n    grpc.credentials.createInsecure());\n\n  const userName = process.argv[2] || 'Monde';\n\n  client.sayHello({ name: userName }, (error, response) => {\n    if (error) {\n      console.error('Erreur :', error.message);\n      return;\n    }\n    console.log('Réponse du serveur :', response.message);\n  });\n}\n\nmain();
\n\n

Lancement et test

\n\n

Lancez le serveur dans un terminal :

\n\n
node server.js
\n\n

Dans un autre terminal, exécutez le client :

\n\n
node client.js Jean
\n\n

Vous dev

Recommendations