gRPC JavaScript (Node.js): लाइब्रेरी और उदाहरण
gRPC एक हाई-परफॉर्मेंस RPC (रिमोट प्रोसीजर कॉल) फ्रेमवर्क है, जिसे Google ने डेवलप किया है। यह डेटा सीरियलाइजेशन के लिए Protocol Buffers (protobuf) और ट्रांसपोर्ट के लिए HTTP/2 का उपयोग करता है। Node.js इकोसिस्टम में, gRPC आपको स्ट्रिक्ट टाइपिंग, स्ट्रीमिंग और दो-तरफा कम्युनिकेशन के साथ मजबूत माइक्रोसर्विसेज बनाने की सुविधा देता है। इस लेख में, हम JavaScript (Node.js) में gRPC के लिए मुख्य लाइब्रेरी और एक प्रैक्टिकल सर्वर-क्लाइंट उदाहरण देखेंगे।
Node.js में gRPC के लिए मुख्य लाइब्रेरी
Node.js में gRPC के साथ काम करने के लिए दो मुख्य पैकेज हैं:
- @grpc/grpc-js — gRPC का शुद्ध JavaScript इम्प्लीमेंटेशन। इसे किसी नेटिव डिपेंडेंसी की जरूरत नहीं है, यह सभी प्लेटफॉर्म पर काम करता है और gRPC की सभी सुविधाओं (यूनरी कॉल, सर्वर और क्लाइंट स्ट्रीमिंग, दो-तरफा स्ट्रीमिंग) को सपोर्ट करता है।
- @grpc/proto-loader — रनटाइम पर
.protoफ़ाइलों को लोड करने की उपयोगिता। यह Protobuf डेफिनिशन से डायनामिक रूप से JavaScript ऑब्जेक्ट बनाने की अनुमति देता है।
.proto फ़ाइलों को स्टैटिक मॉड्यूल में कंपाइल करने के लिए grpc-tools का उपयोग किया जा सकता है, लेकिन आधुनिक प्रोजेक्ट्स में अक्सर @grpc/proto-loader के माध्यम से डायनामिक लोडिंग को प्राथमिकता दी जाती है।
डिपेंडेंसी इंस्टॉल करना
npm install @grpc/grpc-js @grpc/proto-loader
उदाहरण: Proto फ़ाइल डिफाइन करना
एक सरल सर्विस के साथ helloworld.proto फ़ाइल बनाएं:
syntax = "proto3";
package helloworld;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
सर्वर साइड (Node.js)
server.js फ़ाइल बनाएं:
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const path = require('path');
const PROTO_PATH = path.join(__dirname, 'helloworld.proto');
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;
function sayHello(call, callback) {
const name = call.request.name || 'अतिथि';
callback(null, { message: `नमस्ते, ${name}!` });
}
function main() {
const server = new grpc.Server();
server.addService(helloProto.Greeter.service, { sayHello: sayHello });
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
console.log('gRPC सर्वर पोर्ट 50051 पर शुरू हुआ');
server.start();
});
}
main();
क्लाइंट साइड (Node.js)
client.js फ़ाइल बनाएं:
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const path = require('path');
const PROTO_PATH = path.join(__dirname, 'helloworld.proto');
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
const helloProto = grpc.loadPackageDefinition(packageDefinition).helloworld;
function main() {
const client = new helloProto.Greeter('localhost:50051',
grpc.credentials.createInsecure());
const userName = process.argv[2] || 'दुनिया';
client.sayHello({ name: userName }, (error, response) => {
if (error) {
console.error('त्रुटि:', error.message);
return;
}
console.log('सर्वर का जवाब:', response.message);
});
}
main();
चलाना और टेस्ट करना
एक टर्मिनल में सर्वर चलाएं:
node server.js
दूसरे टर्मिनल में क्लाइंट चलाएं:
node client.js राहुल
आपको यह दिखना चाहिए:
सर्वर का जवाब: नमस्ते, राहुल!
gRPC की उन्नत सुविधाएं
gRPC सपोर्ट करता है