TypeScript के लिए gRPC: लाइब्रेरी और उपयोग के उदाहरण
gRPC, Google द्वारा विकसित एक हाई-परफॉर्मेंस RPC फ्रेमवर्क है जो HTTP/2 पर काम करता है और डेटा सीरियलाइजेशन के लिए Protocol Buffers (protobuf) का उपयोग करता है। TypeScript (और Node.js) में gRPC की मदद से आप स्ट्रीम और द्विदिश संचार के साथ कुशल माइक्रोसर्विस आर्किटेक्चर बना सकते हैं। इस पेज पर हम मुख्य लाइब्रेरी, वर्किंग एनवायरनमेंट सेटअप और एक काम करने वाला क्लाइंट-सर्वर एप्लिकेशन उदाहरण देखेंगे।
TypeScript में gRPC के लिए मुख्य लाइब्रेरी
TypeScript इकोसिस्टम में gRPC के साथ काम करने के लिए तीन मुख्य पैकेज हैं:
@grpc/grpc-js— gRPC का शुद्ध JavaScript इम्प्लीमेंटेशन (बिना नेटिव डिपेंडेंसी के), जो HTTP/2 को पूरी तरह सपोर्ट करता है और Node.js 12+ पर काम करता है।@grpc/proto-loader—.protoफाइलों को लोड करने वाला टूल जो protobuf डेफिनिशन के आधार पर JavaScript क्लासेज डायनामिकली बनाता है।ts-proto— proto फाइलों से TypeScript टाइप जनरेट करने वाला टूल। यह बिल्ट-इनgrpc-toolsका एक बेहतर विकल्प है जो स्ट्रिक्ट टाइपिंग को बेहतर सपोर्ट करता है।
सभी कम्पोनेंट्स को एक कमांड से इंस्टॉल करें:
npm install @grpc/grpc-js @grpc/proto-loader ts-proto
npm install -D typescript @types/node
.proto फाइल बनाना
सर्विस को डिफाइन करके शुरू करते हैं। hello.proto नामक फाइल बनाएं:
syntax = "proto3";
package hello;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
rpc SayHelloStream (HelloRequest) returns (stream HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
ts-proto से TypeScript टाइप जनरेट करना
ts-proto पूर्ण इंटरफेस और मैसेज क्लासेज बनाता है। protoc और प्लगइन इंस्टॉल करें:
npm install -g protoc-gen-ts-proto
protoc --ts_proto_out=./generated hello.proto
इसके परिणामस्वरूप generated/hello.ts फाइल बनेगी जिसमें HelloRequest, HelloReply इंटरफेस और टाइपिफाइड GreeterClient सर्विस होगी।
सर्वर साइड (TypeScript में gRPC सर्वर)
server.ts फाइल बनाएं:
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
import { ProtoGrpcType } from './generated/hello';
const packageDef = protoLoader.loadSync('hello.proto');
const grpcObj = (grpc.loadPackageDefinition(packageDef) as unknown) as ProtoGrpcType;
const server = new grpc.Server();
server.addService(grpcObj.hello.Greeter.service, {
SayHello: (call: any, callback: any) => {
const name = call.request.name;
callback(null, { message: `नमस्ते, ${name}!` });
},
SayHelloStream: (call: any) => {
const name = call.request.name;
for (let i = 0; i < 5; i++) {
call.write({ message: `${name} के लिए संदेश ${i + 1}` });
}
call.end();
}
});
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
console.log('सर्वर पोर्ट 50051 पर शुरू हो गया है');
});
क्लाइंट साइड (TypeScript में gRPC क्लाइंट)
client.ts फाइल बनाएं:
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
import { ProtoGrpcType } from './generated/hello';
const packageDef = protoLoader.loadSync('hello.proto');
const grpcObj = (grpc.loadPackageDefinition(packageDef) as unknown) as ProtoGrpcType;
const client = new grpcObj.hello.Greeter(
'localhost:50051',
grpc.credentials.createInsecure()
);
// यूनरी कॉल
client.SayHello({ name: 'राहुल' }, (err, response) => {
if (!err) console.log('जवाब:', response?.message);
});
// Server-streaming कॉल
const stream = client.SayHelloStream({ name: 'सीता' });
stream.on('data', (data) => console.log('स्ट्रीम:', data.message));
stream.on('end', () => console.log('स्ट्रीम समाप्त'));
TypeScript के साथ विशेष बातें
जब आप TypeScript में gRPC का उपयोग करते हैं, तो टाइप सेफ्टी का पूरा लाभ उठाने के लिए ts-proto या grpc-tools से जनरेट किए गए टाइप्स का उपयोग करें। इससे आपकी कोडबेस में एरर कम होंगे और डेवलपमेंट एक्सपीरियंस बेहतर होगा।