TypeScript के लिए gRPC: लाइब्रेरीज़ और उदाहरण
gRPC एक आधुनिक उच्च-प्रदर्शन वाला रिमोट प्रोसीजर कॉल (RPC) फ्रेमवर्क है, जिसे Google द्वारा विकसित किया गया है। यह इंटरफ़ेस परिभाषा भाषा और डेटा सीरियलाइज़ेशन प्रारूप के रूप में Protocol Buffers (protobuf) का उपयोग करता है। TypeScript में, gRPC को पैकेज @grpc/grpc-js (सर्वर और क्लाइंट लॉजिक के लिए) और protobufjs (.proto फ़ाइलों के साथ काम करने के लिए) के माध्यम से कार्यान्वित किया जाता है। इस लेख में, हम प्रमुख लाइब्रेरीज़, पर्यावरण सेटअप पर चर्चा करेंगे और TypeScript में एक कार्यशील उदाहरण लिखेंगे।
TypeScript में gRPC के लिए प्रमुख लाइब्रेरीज़
@grpc/grpc-js— gRPC का शुद्ध JavaScript कार्यान्वयन (बिना C++ ऐड-ऑन के)। सभी मुख्य सुविधाओं का समर्थन करता है: यूनरी कॉल, सर्वर और क्लाइंट स्ट्रीमिंग, द्विदिश स्ट्रीमिंग।protobufjs—.protoफ़ाइलों से क्लासेस लोड करने, पार्स करने और जनरेट करने के लिए लाइब्रेरी। यह गतिशील रूप से संदेश और सेवाएँ बनाने की अनुमति देता है।@grpc/proto-loader— एक सहायक पैकेज जो proto-फ़ाइलों को लोड करना सरल बनाता है और परिभाषाओं के आधार पर स्वचालित रूप से TypeScript प्रकार उत्पन्न करता है।ts-protoc-gen—protocकंपाइलर के लिए कोड जनरेटर। यह.protoफ़ाइलों से सख्ती से टाइप की गई क्लासेस और इंटरफ़ेस उत्पन्न करने की अनुमति देता है।
अधिकांश प्रोजेक्ट्स के लिए, @grpc/grpc-js + @grpc/proto-loader का संयोजन पर्याप्त है। यदि अधिकतम टाइप सुरक्षा की आवश्यकता है, तो ts-protoc-gen या स्थैतिक प्रकार जनरेशन के साथ protobufjs का उपयोग किया जाता है।
निर्भरताएँ स्थापित करना
एक नया प्रोजेक्ट बनाएँ और आवश्यक पैकेज स्थापित करें:
mkdir grpc-typescript-examplecd grpc-typescript-examplenpm init -ynpm install @grpc/grpc-js @grpc/proto-loadernpm install -D typescript @types/nodenpx tsc --initproto-फ़ाइल बनाना
उपयोगकर्ताओं के साथ काम करने के लिए एक सरल सेवा परिभाषित करें। user.proto फ़ाइल बनाएँ:
syntax = "proto3";
package user;
service UserService { rpc GetUser (GetUserRequest) returns (User); rpc ListUsers (ListUsersRequest) returns (stream User);}
message GetUserRequest { int32 id = 1;}
message ListUsersRequest { int32 page = 1; int32 limit = 2;}
message User { int32 id = 1; string name = 2; string email = 3;}TypeScript में gRPC-सर्वर का कार्यान्वयन
server.ts फ़ाइल बनाएँ:
import * as grpc from '@grpc/grpc-js';import * as protoLoader from '@grpc/proto-loader';import path from 'path';
const PROTO_PATH = path.join(__dirname, 'user.proto');
const packageDefinition = protoLoader.loadSync(PROTO_PATH, { keepCase: true, longs: String, enums: String, defaults: true, oneofs: true,});
const userProto = grpc.loadPackageDefinition(packageDefinition) as any;
// डेटाबेस का अनुकरणconst users = [ { id: 1, name: 'Alice', email: 'alice@example.com' }, { id: 2, name: 'Bob', email: 'bob@example.com' },];
function getUser( call: grpc.ServerUnaryCall<{ id: number }, any>, callback: grpc.sendUnaryData<any>) { const user = users.find(u => u.id === call.request.id); if (!user) { return callback({ code: grpc.status.NOT_FOUND, message: 'User not found', }); } callback(null, user);}
function listUsers(call: grpc.ServerWritableStream<{ page: number; limit: number }, any>) { const page = call.request.page || 1; const limit = call.request.limit || 10; const start = (page - 1) * limit; const end = start + limit; const paginatedUsers = users.slice(start, end); paginatedUsers.forEach(user => call.write(user)); call.end();}
function main() { const server = new grpc.Server();