gRPC और उच्च-प्रदर्शन वाले एपीआई · पाठ

सरल यूनरी gRPC सेवा

जनरेट किए गए कोड का उपयोग करके शुरुआत से एक बुनियादी ‘अनुरोध-प्रतिक्रिया’ gRPC सेवा और क्लाइंट लागू करें।

पाठ 3, कुल 4 में से11 चरण

सरल यूनरी gRPC सेवा, CoddyKit पर gRPC और उच्च-प्रदर्शन वाले एपीआई का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह gRPC और उच्च-प्रदर्शन वाले एपीआई सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

एकल RPC: सरल इंटरैक्शन

gRPC में Unary RPC सबसे सरल संचार पैटर्न है। यह पारंपरिक फ़ंक्शन कॉल जैसा होता है, जिसमें क्लाइंट एक अनुरोध सर्वर को भेजता है और सर्वर एक उत्तर देता है।

इसे एक मानक "अनुरोध-उत्तर" मॉडल की तरह समझिए। आगे बढ़ने से पहले क्लाइंट सर्वर के उत्तर की प्रतीक्षा करता है।

  • क्लाइंट एक संदेश भेजता है।
  • सर्वर एक संदेश वापस भेजता है।
  • यह सबसे सामान्य RPC प्रकार है।

अपने Protobuf की समीक्षा

कार्यान्वयन शुरू करने से पहले, आइए अपनी सरल Protocol Buffer (Protobuf) परिभाषा को संक्षेप में याद कर लें। यह स्कीमा उस सेवा और उन संदेशों को परिभाषित करती है, जिनका हम उपयोग करेंगे।

हम Greeter सेवा को SayHello मेथड के साथ लागू करेंगे।

syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.example.grpc.helloworld";
option java_outer_classname = "HelloWorldProto";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

(याद रखें, कोड तैयार करने की प्रक्रिया पिछले पाठ में समझाई गई थी।)

सर्वर: मूल क्लास का विस्तार

हमारी .proto फाइल से कोड तैयार करने के बाद, gRPC हमारे सर्वर के लिए एक अमूर्त मूल क्लास बनाता है। हमारी Greeter सेवा के लिए यह GreeterGrpc.GreeterImplBase है।

अपनी सेवा लागू करने के लिए हम एक नई क्लास बनाते हैं, जो इस मूल क्लास का विस्तार करती है और सेवा के मेथड को ओवरराइड करती है।

class GreeterImpl extends GreeterGrpc.GreeterImplBase {
    @Override
    public void sayHello(HelloRequest req,
                         StreamObserver<HelloReply> resObserver) {
        // ... implementation goes here ...
    }
}

StreamObserver के माध्यम से हम उत्तर वापस भेजते हैं।

सर्वर लॉजिक: उत्तर बनाना

sayHello मेथड के अंदर हमें HelloRequest प्राप्त होता है। इसके बाद हम इसे संसाधित करके अपना HelloReply बना सकते हैं।

StreamObserver.onNext() मेथड उत्तर भेजता है और onCompleted() संकेत देता है कि RPC पूरा हो गया है।

class GreeterImpl extends GreeterGrpc.GreeterImplBase {
    @Override
    public void sayHello(HelloRequest req,
                         StreamObserver<HelloReply> resObserver) {
        System.out.println("Received name: " + req.getName());
        HelloReply reply = HelloReply.newBuilder()
                                   .setMessage("Hello " + req.getName())
                                   .build();
        resObserver.onNext(reply);     // Send the response
        resObserver.onCompleted();  // Mark RPC as complete
    }
}

सर्वर का पूर्ण कार्यान्वयन

अब आइए सब कुछ एक साथ रखकर gRPC सर्वर बनाएँ और शुरू करें। यह सर्वर एक विशिष्ट पोर्ट पर आने वाले क्लाइंट अनुरोधों के लिए सुनता रहेगा।

इस कोड को चलाकर देखें और फिर क्लाइंट के कार्यान्वयन पर आगे बढ़ें!

package com.example.grpc.helloworld;

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

public class HelloWorldServer {
    private Server server;

    private void start() throws IOException {
        int port = 50051;
        server = ServerBuilder.forPort(port)
                .addService(new GreeterImpl())
                .build()
                .start();
        System.out.println("Server started, listening on " + port);
        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                System.err.println("*** shutting down gRPC server since JVM is shutting down");
                try {
                    HelloWorldServer.this.stop();
                } catch (InterruptedException e) {
                    e.printStackTrace(System.err);
                }
                System.err.println("*** server shut down");
            }
        });
    }

    private void stop() throws InterruptedException {
        if (server != null) {
            server.shutdown().awaitTermination(30, TimeUnit.SECONDS);
        }
    }

    private void blockUntilShutdown() throws InterruptedException {
        if (server != null) {
            server.awaitTermination();
        }
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        final HelloWorldServer server = new HelloWorldServer();
        server.start();
        server.blockUntilShutdown();
    }

    static class GreeterImpl extends GreeterGrpc.GreeterImplBase {
        @Override
        public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
            System.out.println("Received: " + req.getName());
            HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();
            responseObserver.onNext(reply);
            responseObserver.onCompleted();
        }
    }
}

क्लाइंट स्टब: कनेक्ट करना और कॉल करना

क्लाइंट की ओर gRPC "स्टब" भी तैयार करता है। ये स्टब दूरस्थ सेवा को कॉल करने के मेथड प्रदान करते हैं, जिससे यह स्थानीय मेथड कॉल जैसा लगता है।

एकल RPC के लिए हम अक्सर ब्लॉकिंग स्टब का उपयोग करते हैं, जिसका अर्थ है कि क्लाइंट सर्वर के उत्तर की प्रतीक्षा करता है।

// Blocking stub for our Greeter service
GreeterGrpc.GreeterBlockingStub blockingStub;

स्टब आपके लिए अंतर्निहित नेटवर्क संचार के सभी विवरण संभाल लेगा!

क्लाइंट चैनल: कनेक्शन

स्टब का उपयोग करने से पहले क्लाइंट को एक चैनल की आवश्यकता होती है। चैनल किसी विशिष्ट होस्ट और पोर्ट पर मौजूद gRPC सर्वर से कनेक्शन को दर्शाता है।

चैनल आमतौर पर लंबे समय तक सक्रिय रहते हैं और कई RPC कॉल के लिए दोबारा उपयोग किए जा सकते हैं।

ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 50051)
                                            .usePlaintext() // No TLS for simplicity
                                            .build();
blockingStub = GreeterGrpc.newBlockingStub(channel);

स्थानीय विकास के लिए usePlaintext() ठीक है, लेकिन उत्पादन वातावरण में इसका उपयोग न करें!

क्लाइंट का पूर्ण कार्यान्वयन

चैनल और स्टब तैयार होने के बाद अब हम अपना एकल RPC कॉल कर सकते हैं। हम एक HelloRequest बनाएँगे और उसे स्टब के माध्यम से भेजेंगे।

पिछले चरण वाला सर्वर चलाएँ, फिर इस क्लाइंट को चलाकर इसे काम करते हुए देखें!

package com.example.grpc.helloworld;

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.StatusRuntimeException;

import java.util.concurrent.TimeUnit;

public class HelloWorldClient {
    private final ManagedChannel channel;
    private final GreeterGrpc.GreeterBlockingStub blockingStub;

    public HelloWorldClient(String host, int port) {
        channel = ManagedChannelBuilder.forAddress(host, port)
                .usePlaintext() // For simplicity, no TLS
                .build();
        blockingStub = GreeterGrpc.newBlockingStub(channel);
    }

    public void shutdown() throws InterruptedException {
        channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
    }

    public void greet(String name) {
        System.out.println("Will try to greet " + name + "...");
        HelloRequest request = HelloRequest.newBuilder().setName(name).build();
        HelloReply response;
        try {
            response = blockingStub.sayHello(request);
        } catch (StatusRuntimeException e) {
            System.err.println("RPC failed: " + e.getStatus());
            return;
        }
        System.out.println("Greeting: " + response.getMessage());
    }

    public static void main(String[] args) throws Exception {
        HelloWorldClient client = new HelloWorldClient("localhost", 50051);
        try {
            String user = "CoddyKit User";
            if (args.length > 0) {
                user = args[0];
            }
            client.greet(user);
        } finally {
            client.shutdown();
        }
    }
}

एकल प्रवाह: अनुरोध और उत्तर

जब आप क्लाइंट चलाते हैं, तो यह HelloRequest सर्वर को भेजता है। सर्वर इसे प्राप्त करके हमारे GreeterImpl का उपयोग करते हुए संसाधित करता है और एक HelloReply वापस भेजता है।

  • क्लाइंट: चैनल और स्टब बनाता है, फिर HelloRequest तैयार करता है।
  • क्लाइंट: blockingStub.sayHello(request) को कॉल करता है।
  • सर्वर: sayHello मेथड में HelloRequest प्राप्त करता है।
  • सर्वर: इसे संसाधित करता है, HelloReply बनाता है, फिर onNext() और onCompleted() को कॉल करता है।
  • क्लाइंट: HelloReply प्राप्त करता है और निष्पादन जारी रखता है।

इससे एक पूरा एकल RPC चक्र पूरा हो जाता है!

एकल सेवा जाँच

एक gRPC एकल सेवा पर विचार करें। अनुरोध प्राप्त करने, उसे संसाधित करने और एकल उत्तर वापस भेजने के लिए कौन-सा घटक ज़िम्मेदार है?

पुनरावलोकन: सरल एकल RPC

बहुत अच्छा! आपने मूल एकल gRPC सेवा और क्लाइंट लागू करना सीख लिया है:

  • हमने अपनी सेवा के Protobuf स्कीमा की समीक्षा की।
  • हमने तैयार की गई मूल क्लास का विस्तार करके और अनुरोधों को संभालकर सर्वर लॉजिक लागू किया।
  • हमने एक gRPC सर्वर इंस्टेंस बनाया और उसे शुरू किया।
  • क्लाइंट की ओर हमने कनेक्ट करने के लिए चैनल और RPC कॉल करने के लिए ब्लॉकिंग स्टब का उपयोग किया।

एकल RPC gRPC के लिए मूलभूत हैं और सरल अनुरोध-उत्तर संचार का एक विश्वसनीय तरीका प्रदान करते हैं। अब हम अधिक उन्नत स्ट्रीमिंग पैटर्न का अध्ययन करेंगे!

शुरुआत निःशुल्क

एआई शिक्षक के साथ gRPC और उच्च-प्रदर्शन वाले एपीआई सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
12
पाठ
48

अक्सर पूछे जाने वाले प्रश्न

क्या “सरल यूनरी gRPC सेवा” पाठ निःशुल्क है?

हाँ—“सरल यूनरी gRPC सेवा” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“सरल यूनरी gRPC सेवा” में मैं क्या सीखूँगा?

जनरेट किए गए कोड का उपयोग करके शुरुआत से एक बुनियादी ‘अनुरोध-प्रतिक्रिया’ gRPC सेवा और क्लाइंट लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ gRPC और उच्च-प्रदर्शन वाले एपीआई का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या gRPC और उच्च-प्रदर्शन वाले एपीआई शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर gRPC और उच्च-प्रदर्शन वाले एपीआई शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“सरल यूनरी gRPC सेवा” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर gRPC और उच्च-प्रदर्शन वाले एपीआई पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Protobuf स्कीमा परिभाषा
  2. gRPC कोड जनरेट करना
  3. सरल यूनरी gRPC सेवा
  4. स्ट्रीमिंग RPC: सर्वर, क्लाइंट और द्विदिशीय
← gRPC और उच्च-प्रदर्शन वाले एपीआई पर वापस जाएँ