C# (.NET) के लिए gRPC: लाइब्रेरीज़, सेटअप और कोड उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C# (.NET) के लिए gRPC: लाइब्रेरीज़ और उदाहरण



gRPC एक आधुनिक उच्च-प्रदर्शन वाला रिमोट प्रोसीजर कॉल (RPC) फ्रेमवर्क है, जिसे Google द्वारा विकसित किया गया है। यह ट्रांसपोर्ट के लिए HTTP/2 और डेटा सीरियलाइज़ेशन के लिए Protocol Buffers (protobuf) का उपयोग करता है। .NET इकोसिस्टम में, gRPC माइक्रोसर्विस आर्किटेक्चर बनाने के लिए एक मुख्य उपकरण बन गया है, जो सख्त टाइपिंग, द्विदिशात्मक स्ट्रीमिंग ट्रांसमिशन और कम विलंबता प्रदान करता है। इस लेख में, हम C# में gRPC के साथ काम करने के लिए प्रमुख लाइब्रेरीज़ पर चर्चा करेंगे और व्यावहारिक उदाहरण देंगे।



.NET में gRPC के लिए मुख्य लाइब्रेरीज़



.NET में gRPC के साथ काम करने के लिए निम्नलिखित NuGet पैकेज का उपयोग किया जाता है:



  • Grpc.Net.Client — gRPC क्लाइंट बनाने के लिए क्लाइंट लाइब्रेरी। यह HttpClient के ऊपर काम करता है और सभी प्रकार के कॉल का समर्थन करता है: unary, server streaming, client streaming और bidirectional streaming।
  • Grpc.AspNetCore.Server — ASP.NET Core में gRPC को एकीकृत करने के लिए सर्वर लाइब्रेरी। यह सामान्य REST API के साथ gRPC सेवाओं को होस्ट करने की अनुमति देता है।
  • Google.Protobuf — Protocol Buffers के साथ काम करने, संदेशों को जनरेट और डीसीरियलाइज़ करने के लिए लाइब्रेरी।
  • Grpc.Tools — प्रोजेक्ट बिल्ड के दौरान .proto फ़ाइलों से स्वचालित रूप से C# कोड जनरेट करने के लिए टूल्स का सेट।


विकास प्रक्रिया में तीन चरण शामिल हैं: .proto-फ़ाइल में सेवा का वर्णन, कोड जनरेशन और सर्वर/क्लाइंट का कार्यान्वयन।



उदाहरण 1: सरल unary-सेवा (अनुरोध-प्रतिक्रिया)



हम उपयोगकर्ता जानकारी प्राप्त करने के लिए एक सरल सेवा बनाएंगे। इसके लिए user.proto फ़ाइल परिभाषित करें:



syntax = "proto3";

package user;

service UserService { rpc GetUser (UserRequest) returns (UserResponse);}

message UserRequest { int32 id = 1;}

message UserResponse { string name = 1; string email = 2; int32 age = 3;}


प्रोजेक्ट में पैकेज और .proto-फ़ाइल के संदर्भ जोड़ें। बिल्ड के बाद, UserRequest, UserResponse क्लास और बेस क्लास UserServiceBase जनरेट हो जाएंगे।



सर्वर का कार्यान्वयन



using Grpc.Core;using User;

public class UserServiceImpl : UserService.UserServiceBase{ public override Task<UserResponse> GetUser(UserRequest request, ServerCallContext context) { var user = new UserResponse { Name = "इवान पेत्रोव", Email = "ivan@example.com", Age = 30 }; return Task.FromResult(user); }}


ASP.NET Core में सर्वर प्रारंभ करना:



var builder = WebApplication.CreateBuilder(args);builder.Services.AddGrpc();var app = builder.Build();app.MapGrpcService<UserServiceImpl>();app.Run();


क्लाइंट का कार्यान्वयन



using Grpc.Net.Client;using User;

var channel = GrpcChannel.ForAddress("https://localhost:5001");var client = new UserService.UserServiceClient(channel);

var response = await client.GetUserAsync(new UserRequest { Id = 1 });Console.WriteLine($"उपयोगकर्ता: {response.Name}, ईमेल: {response.Email}");


उदाहरण 2: सर्वर स्ट्रीमिंग ट्रांसमिशन (Server Streaming)



सर्वर स्ट्रीमिंग ट्रांसमिशन तब उपयोगी होता है जब क्लाइंट को बहुत सारा डेटा भेजना हो, जैसे कि इवेंट्स या लॉग की सूची। हम अपनी .proto-फ़ाइल को अपडेट करते हैं:



service UserService {  rpc GetUser (UserRequest) returns (UserResponse);  rpc ListUsers (Empty) returns (stream UserResponse);}

message Empty {}


सर्वर का कार्यान्वयन:



public override async Task ListUsers(Empty request, IServerStreamWriter<UserResponse> responseStream, ServerCallContext context){    var users = new List<UserResponse>    {        new UserResponse { Name = "अन्ना", Email = "anna@test.com" },        new UserResponse { Name = "बोरिस", Email = "boris@test.com" }    };

अनुशंसाएँ