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

सर्वर स्ट्रीमिंग की व्याख्या

सर्वर-पक्षीय स्ट्रीमिंग को समझें और लागू करें, जिसमें सर्वर एक क्लाइंट अनुरोध के लिए कई प्रतिक्रियाएँ भेजता है।

पाठ 1, कुल 4 में से12 चरण

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

सर्वर स्ट्रीमिंग की मूल बातें

gRPC में सर्वर-पक्ष स्ट्रीमिंग कॉल वह होती है, जिसमें क्लाइंट एक अनुरोध भेजता है, लेकिन सर्वर संदेशों का एक क्रम भेजकर उत्तर देता है।

इसे न्यूज़लेटर की सदस्यता लेने जैसा समझिए: आप एक अनुरोध (सदस्यता लें) भेजते हैं और सर्वर समय-समय पर आपको कई अपडेट (न्यूज़लेटर) भेजता है।

स्ट्रीमिंग के उपयोग के मामले

सर्वर स्ट्रीमिंग उन परिस्थितियों के लिए उपयुक्त है, जहाँ सर्वर को समय के साथ क्लाइंट को अपडेट या बड़ी मात्रा में डेटा भेजना होता है। इसके सामान्य उपयोगों में शामिल हैं:

  • रीयल-टाइम डेटा फ़ीड: शेयर की कीमतें, सेंसर रीडिंग।
  • सूचनाएँ: चेतावनियाँ, चैट संदेश।
  • बड़े डेटा डाउनलोड: किसी बड़ी फाइल को छोटे-छोटे हिस्सों में बाँटना।

सर्वर स्ट्रीमिंग के लिए Protobuf

अपनी .proto फाइल में सर्वर-पक्ष स्ट्रीमिंग मेथड परिभाषित करने के लिए आपको बस response प्रकार से पहले stream कीवर्ड जोड़ना होता है।

इससे gRPC को पता चलता है कि सर्वर प्रत्येक क्लाइंट अनुरोध के लिए केवल एक नहीं, बल्कि कई संदेश भेजेगा।

स्ट्रीमिंग Protobuf का उदाहरण

सर्वर से संदेशों की स्ट्रीम भेजने वाली सेवा को इस तरह परिभाषित किया जाता है:

syntax = "proto3";

option java_package = "com.coddykit.grpc";
option java_outer_classname = "StreamingProto";

service NotifierService {
  rpc SubscribeToNotifications (SubscriptionRequest) returns (stream Notification);
}

message SubscriptionRequest {
  string userId = 1;
}

message Notification {
  string message = 1;
  int64 timestamp = 2;
}

सर्वर स्ट्रीम लागू करना

सर्वर की ओर आपका स्ट्रीमिंग मेथड, एकल अनुरोध ऑब्जेक्ट प्राप्त करेगा, ठीक वैसे ही जैसे एकल कॉल में होता है। लेकिन एकल उत्तर लौटाने के बजाय, आप क्लाइंट को कई उत्तर भेजने के लिए StreamObserver का उपयोग करेंगे।

आमतौर पर आप लूप में संदेश भेजेंगे और काम पूरा होने पर onCompleted() को कॉल करेंगे।

सर्वर मेथड की संरचना

स्ट्रीमिंग कॉल के लिए सर्वर विधि अनुरोध और एक StreamObserver लेती है। आप responseObserver.onNext() के ज़रिए प्रतिक्रियाएँ भेजते हैं और responseObserver.onCompleted() के ज़रिए पूर्णता का संकेत देते हैं।

// Example (Java)
public void subscribeToNotifications(SubscriptionRequest request,
    io.grpc.stub.StreamObserver<Notification> responseObserver) {

  String userId = request.getUserId();
  System.out.println("Client " + userId + " subscribed.");

  // Simulate sending multiple notifications
  for (int i = 0; i < 3; i++) {
    Notification notification = Notification.newBuilder()
        .setMessage("Update " + (i + 1) + " for " + userId)
        .setTimestamp(System.currentTimeMillis())
        .build();
    responseObserver.onNext(notification); // Send a message
    try {
      Thread.sleep(1000); // Wait a bit
    } catch (InterruptedException e) { /* handle */ }
  }

  responseObserver.onCompleted(); // Signal completion
  System.out.println("Finished sending notifications to " + userId);
}

स्ट्रीम की गई प्रतिक्रियाएँ प्राप्त करना

क्लाइंट एक ही कॉल करता है, लेकिन फिर उसे कई प्रतिक्रियाओं की प्रतीक्षा करके उन्हें संसाधित करना होता है। यह आने वाले संदेशों, त्रुटियों और सर्वर से मिलने वाले पूर्णता संकेत को संभालने के लिए एक StreamObserver देता है।

इस ऑब्ज़र्वर में onNext(), onError() और onCompleted() विधियाँ होंगी।

क्लाइंट स्ट्रीम ऑब्ज़र्वर

क्लाइंट का StreamObserver यह निर्धारित करता है कि वह सर्वर स्ट्रीम की प्रत्येक घटना पर कैसे प्रतिक्रिया देगा। यह onCompleted को कॉल किए जाने तक प्रत्येक onNext संदेश को संसाधित करता है।

// Example (Java)
StreamObserver<Notification> responseObserver = new StreamObserver<Notification>() {
  @Override
  public void onNext(Notification notification) {
    System.out.println("Received: " + notification.getMessage());
  }

  @Override
  public void onError(Throwable t) {
    System.err.println("Error: " + t.getMessage());
  }

  @Override
  public void onCompleted() {
    System.out.println("Server stream completed.");
  }
};

// Call the streaming method
// asyncStub.subscribeToNotifications(request, responseObserver);

पूर्ण सर्वर स्ट्रीम सेवा

यह एक पूर्ण gRPC सर्वर है, जो SubscribeToNotifications सर्वर-साइड स्ट्रीमिंग विधि को लागू करता है। इसे पहले चलाएँ, फिर क्लाइंट को चलाएँ!

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;
import com.coddykit.grpc.StreamingProto.SubscriptionRequest;
import com.coddykit.grpc.StreamingProto.Notification;
import com.coddykit.grpc.NotifierServiceGrpc.NotifierServiceImplBase;

public class StreamingServer {

  private Server server;

  private void start() throws Exception {
    int port = 50051;
    server = ServerBuilder.forPort(port)
        .addService(new NotifierServiceImpl())
        .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");
        StreamingServer.this.stop();
        System.err.println("*** server shut down");
      }
    });
  }

  private void stop() {
    if (server != null) {
      server.shutdown();
    }
  }

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

  public static void main(String[] args) throws Exception {
    final StreamingServer server = new StreamingServer();
    server.start();
    server.blockUntilShutdown();
  }

  static class NotifierServiceImpl extends NotifierServiceImplBase {
    @Override
    public void subscribeToNotifications(SubscriptionRequest request,
        StreamObserver<Notification> responseObserver) {

      String userId = request.getUserId();
      System.out.println("Server received subscription from: " + userId);

      for (int i = 0; i < 3; i++) {
        Notification notification = Notification.newBuilder()
            .setMessage("Update " + (i + 1) + " for " + userId)
            .setTimestamp(System.currentTimeMillis())
            .build();
        responseObserver.onNext(notification);
        try {
          Thread.sleep(1000); // Simulate some work
        } catch (InterruptedException e) {
          Thread.currentThread().interrupt();
          responseObserver.onError(e);
          return;
        }
      }
      responseObserver.onCompleted();
      System.out.println("Server finished sending notifications to: " + userId);
    }
  }
}

पूर्ण क्लाइंट स्ट्रीम रिसीवर

अब यह क्लाइंट कोड चलाएँ। यह सर्वर से कनेक्ट होकर सूचनाओं की स्ट्रीम प्राप्त करेगा।

import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import com.coddykit.grpc.StreamingProto.SubscriptionRequest;
import com.coddykit.grpc.StreamingProto.Notification;
import com.coddykit.grpc.NotifierServiceGrpc;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class StreamingClient {

  public static void main(String[] args) throws InterruptedException {
    ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 50051)
        .usePlaintext() // For local testing, no TLS
        .build();

    NotifierServiceGrpc.Stub asyncStub = NotifierServiceGrpc.newStub(channel);

    CountDownLatch latch = new CountDownLatch(1);

    System.out.println("Client sending subscription request...");
    SubscriptionRequest request = SubscriptionRequest.newBuilder()
        .setUserId("user123")
        .build();

    asyncStub.subscribeToNotifications(request, new StreamObserver<Notification>() {
      @Override
      public void onNext(Notification notification) {
        System.out.println("Client received notification: " + notification.getMessage());
      }

      @Override
      public void onError(Throwable t) {
        System.err.println("Client received error: " + t.getMessage());
        latch.countDown();
      }

      @Override
      public void onCompleted() {
        System.out.println("Client stream completed.");
        latch.countDown();
      }
    });

    latch.await(5, TimeUnit.SECONDS); // Wait for stream to complete
    System.out.println("Client finished.");

    channel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
  }
}

स्ट्रीम विधि जाँच

आप एक ऐसी gRPC सेवा बना रहे हैं, जिसमें क्लाइंट हाल की लॉग प्रविष्टियों की सूची का अनुरोध करता है और सर्वर नई प्रविष्टियाँ आते ही लगातार भेजता है। इसके लिए कौन-सी प्रोटोबफ़ परिभाषा GetLogStream विधि को सही ढंग से स्थापित करती है?

स्ट्रीमिंग का पुनरावलोकन

बहुत अच्छा! इस पाठ में आपने gRPC में सर्वर-साइड स्ट्रीमिंग के बारे में सीखा है।

  • इससे सर्वर एक क्लाइंट अनुरोध के लिए कई प्रतिक्रियाएँ भेज सकता है।
  • प्रोटोबफ़ में इसे प्रतिक्रिया प्रकार पर stream कीवर्ड का उपयोग करके परिभाषित किया जाता है।
  • आपने इन लगातार चलने वाले डेटा प्रवाहों को संभालने के लिए सर्वर और क्लाइंट, दोनों का तर्क लागू किया।

अब हम क्लाइंट-साइड स्ट्रीमिंग देखेंगे, जिसमें क्लाइंट कई अनुरोध भेजता है!

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

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

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

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

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

क्या “सर्वर स्ट्रीमिंग की व्याख्या” पाठ निःशुल्क है?

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

“सर्वर स्ट्रीमिंग की व्याख्या” में मैं क्या सीखूँगा?

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

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

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

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

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

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

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

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

  1. सर्वर स्ट्रीमिंग की व्याख्या
  2. क्लाइंट स्ट्रीमिंग की व्याख्या
  3. द्विदिशीय स्ट्रीमिंग
  4. स्ट्रीमिंग प्रवाह नियंत्रण और बैकप्रेशर
← gRPC और उच्च-प्रदर्शन वाले एपीआई पर वापस जाएँ