C# के साथ gRPC सेवा बनाना

1. खास जानकारी

gRPC, भाषा के लिए न्यूट्रल, प्लैटफ़ॉर्म न्यूट्रल रिमोट प्रोसेस कॉल (RPC) फ़्रेमवर्क और टूलसेट है. इसे Google ने बनाया है. यह प्रोटोकॉल बफ़र का इस्तेमाल करके, किसी सेवा को तय करने में आपकी मदद करता है. यह खास तौर पर ज़्यादा कारगर बाइनरी सीरियलाइज़ेशन टूलसेट और भाषा है. इसके बाद, यह आपको कई भाषाओं में अपनी सेवा की परिभाषा से मुहावरेदार क्लाइंट और सर्वर स्टब जनरेट करने देता है.

इस कोडलैब में, ऐसी C# सेवा बनाने का तरीका बताया गया है जो gRPC फ़्रेमवर्क का इस्तेमाल करके, एपीआई की जानकारी देती है. इस सेवा के साथ इंटरैक्ट करने के लिए, C# में लिखे गए कंसोल क्लाइंट का इस्तेमाल करें. यह क्लाइंट, सेवा की जानकारी का ही इस्तेमाल करता है.

आपको इनके बारे में जानकारी मिलेगी

  • प्रोटोकॉल बफ़र लैंग्वेज.
  • C# का इस्तेमाल करके gRPC सेवा लागू करने का तरीका.
  • C# का इस्तेमाल करके gRPC क्लाइंट को लागू करने का तरीका.
  • gRPC सेवा को अपडेट करने का तरीका.

आपको इनकी ज़रूरत होगी

  • Chrome या Firefox ब्राउज़र जैसा कोई ब्राउज़र.
  • विज़ुअल Studio 2013 या इसके बाद वाला वर्शन इंस्टॉल किया गया हो.
  • .NET फ़्रेमवर्क और C# लैंग्वेज के बारे में जानकारी.

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे सिर्फ़ पढ़ें इसे पढ़ें और कसरतों को पूरा करें

Google Cloud Platform के साथ अपने अनुभव को कैसे रेटिंग दें?

शुरुआती इंटरमीडिएट कुशल

2. gRPC C# के नमूने डाउनलोड और बनाएं

सैंपल डाउनलोड करें

gRPC C# सैंपल रिपॉज़िटरी को ZIP फ़ाइल के तौर पर डाउनलोड करें और उसे एक्सट्रैक्ट करें.

इसके अलावा, इसकी git रिपॉज़िटरी को क्लोन भी किया जा सकता है.

git clone https://github.com/meteatamel/grpc-samples-dotnet.git

दोनों ही मामलों में, आपके पास इन कॉन्टेंट वाला grpc-samples-dotnet फ़ोल्डर होना चाहिए:

d056832ff4ce0c8f.png

समाधान बनाएं

सैंपल ऐप्लिकेशन फ़ोल्डर में GrpcSamples.sln शामिल है, जो कि Visual Studio समाधान है. इसे विज़ुअल स्टूडियो में खोलने के लिए दो बार क्लिक करें. आपको कई प्रोजेक्ट वाला एक समाधान दिखना चाहिए.

61da9ddc86c08019.png

अगले सेक्शन में, हम इन प्रोजेक्ट के बारे में ज़्यादा जानकारी देंगे. हालांकि, पहले प्रोजेक्ट को बनाते हैं. समाधान बनाने के लिए, Build > Build Solution या Ctrl + Shift + B पर जाएं. इससे, NuGet से सभी डिपेंडेंसी डाउनलोड हो जाएंगी और ऐप्लिकेशन कंपाइल हो जाएगा.

आखिर में, आपको Visual Studio कंसोल आउटपुट में Build succeeded मैसेज दिखेगा.

3. ग्रीटर सैंपल के बारे में जानें

वेलकम मैसेज, gRPC का एक सामान्य नमूना होता है. इसमें क्लाइंट नाम के साथ अनुरोध भेजता है और सर्वर नाम के बाद मैसेज भेजकर जवाब देता है. एक Geeter प्रोजेक्ट है, जिसमें सामान्य सेवा परिभाषा (प्रोटो फ़ाइल) शामिल है, जिस पर क्लाइंट और सर्वर आधारित हैं.

ग्रीटर प्रोजेक्ट

यह क्लाइंट और सर्वर के बीच शेयर किया जाने वाला सामान्य प्रोजेक्ट है. इसमें greeter.proto है, जो gRPC सेवा की परिभाषा है. इसे क्लाइंट और सर्वर इस्तेमाल करते हैं. सेवा की परिभाषा, GreetingService नाम की gRPC सेवा के बारे में बताती है. इसमें एक greeting तरीका है, जो HelloRequest को इनपुट के तौर पर और HelloResponse को आउटपुट के तौर पर लेता है.

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
}

यह एक सिंगल (बिना स्ट्रीमिंग वाला) तरीका है, जिसमें क्लाइंट एक अनुरोध भेजता है और सर्वर से एक ही जवाब मिलता है. आप greeter.proto. की बाकी सामग्री एक्सप्लोर कर सकते हैं. इस प्रोजेक्ट में generate_protos.bat नाम की एक स्क्रिप्ट भी है, जिसका इस्तेमाल प्रोटो फ़ाइल से क्लाइंट और सर्वर स्टब जनरेट करने के लिए किया जा सकता है. प्रोजेक्ट में पहले से ही, जनरेट किए गए क्लाइंट और सर्वर स्टब होते हैं. इसलिए, आपको उन्हें खुद जनरेट करने की ज़रूरत नहीं होती. हालांकि, अगर सर्विस डेफ़िनिशन फ़ाइल में कोई बदलाव किया जाता है, तो आपको स्टब को फिर से जनरेट करने के लिए यह स्क्रिप्ट चलानी होगी.

ग्रीटर सर्वर

यह gRPC सर्वर का प्रोजेक्ट है. Program.cs वह मुख्य एंट्रीपॉइंट है जहां पोर्ट और सर्वर को सेट अप किया जाता है. अहम क्लास GreeterServiceImpl.cs है. इसमें greeting तरीका होता है, जिसमें असल फ़ंक्शन लागू किया जाता है.

public override Task<HelloResponse> greeting(HelloRequest request,
       ServerCallContext context)
{
    return Task.FromResult(new HelloResponse { 
          Greeting = "Hello " + request.Name });
}

ग्रीटर क्लाइंट

यह gRPC सेवा का क्लाइंट साइड है. इसमें एंट्री पॉइंट के तौर पर Program.cs भी है. यह सर्वर से बात करने के लिए एक चैनल बनाता है और फिर जनरेट किए गए स्टब से चैनल के साथ एक क्लाइंट बनाता है. इसके बाद, यह एक अनुरोध तैयार करता है और क्लाइंट स्टब का इस्तेमाल करके, उसे सर्वर पर भेज देता है.

4. ग्रीटर सैंपल चलाएं

सबसे पहले, ग्रीटर सर्वर चालू करें. कोई कमांड प्रॉम्प्ट खोलें और Greeter Server के bin > Debug फ़ोल्डर में जाएं और एक्ज़ीक्यूटेबल चलाएं. आपको सर्वर को सुनना चाहिए.

> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...

इसके बाद, ग्रीटर क्लाइंट चलाएं. एक अलग कमांड प्रॉम्प्ट में, Greeter Server के bin > Debug फ़ोल्डर में जाएं और एक्ज़ीक्यूटेबल चलाएं. आपको यह दिखेगा कि क्लाइंट अनुरोध भेज रहा है और उसे सर्वर से जवाब मिला है.

> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...

5. ग्रीटर सैंपल को अपडेट करें

आइए देखते हैं कि हमारी सेवा को अपडेट करने पर क्या होता है. हमारी gRPC सेवा में एक नया तरीका जोड़ें, जिसे 'अलविदा' कहा जाता है. इससे क्लाइंट को हैलो के बजाय अलविदा कहा जाता है.

सबसे पहले, सेवा से जुड़ी परिभाषा वाली फ़ाइल greeter.proto. को अपडेट करें

service GreetingService {
    rpc greeting(HelloRequest) returns (HelloResponse);
    
    rpc goodbye(HelloRequest) returns (HelloResponse);
}

इसके बाद, आपको क्लाइंट और सर्वर स्टब फिर से जनरेट करना होगा. कमांड प्रॉम्प्ट में, generate_protos.bat को चलाएं. स्टब जनरेट होने के बाद, अपडेट किया गया कोड पाने के लिए आपको अपने Visual Studio प्रोजेक्ट को रीफ़्रेश करना पड़ सकता है.

आखिर में, नए तरीके का फ़ायदा लेने के लिए क्लाइंट और सर्वर कोड को अपडेट करें. सेवा में, GreeterServiceImpl.cs को अपडेट करें और goodbye का नया तरीका जोड़ें.

public override Task<HelloResponse> goodbye(HelloRequest request,
       ServerCallContext context)
{
    return Task.FromResult(new HelloResponse { 
          Greeting = "Goodbye " + request.Name });
}

क्लाइंट में, Program.cs. में goodbye तरीके को कॉल करें

response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: " 
                       + response.Greeting);

प्रोजेक्ट फिर से बनाएं और सर्वर और क्लाइंट को फिर से चलाएं. अब आपको क्लाइंट को बाय मैसेज मिलेगा.

> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...

6. Chat का सैंपल एक्सप्लोर करें

इस सलूशन में ChatServer और ChatWindowsClient प्रोजेक्ट भी शामिल किए गए हैं. जैसा कि इस सुविधा के नाम से पता चलता है, यह एक सामान्य चैट ऐप्लिकेशन के लिए क्लाइंट और सर्वर का जोड़ा है. Chat प्रोजेक्ट में सेवा डेफ़िनिशन फ़ाइल है, जिसका नाम chat.proto है. यह chat तरीके से ChatService के बारे में जानकारी देता है.

service ChatService {
 rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}

अहम बात यह है कि इनकमिंग और आउटगोइंग, दोनों तरह के चैट मैसेज stream कीवर्ड से मार्क किए जाते हैं. इससे मूल तौर पर, कनेक्शन दो-तरफ़ा स्ट्रीम में बदल जाता है. इसमें क्लाइंट और सर्वर, एक-दूसरे को किसी भी समय मैसेज भेज सकते हैं; चैट ऐप्लिकेशन के लिए एक बेहतरीन समाधान है.

सैंपल को और एक्सप्लोर किया जा सकता है, बनाया जा सकता है, और चलाकर देखा जा सकता है कि यह कसरत के तौर पर कैसे काम करता है.

7. बधाई हो!

इसमें हमने इन विषयों के बारे में बताया

  • प्रोटोकॉल बफ़र लैंग्वेज.
  • C# का इस्तेमाल करके gRPC सेवा लागू करने का तरीका.
  • C# का इस्तेमाल करके gRPC क्लाइंट को लागू करने का तरीका.
  • gRPC सेवा को अपडेट करने का तरीका.

अगले चरण