0Pricing
gRPC & High Performance APIs · Leçon

Contrôle du flux et rétropression des flux

Maîtrisez la façon dont les flux gRPC gèrent le contrôle du flux et la rétropression, afin que les producteurs rapides ne submergent jamais les consommateurs lents sur des connexions bidirectionnelles de longue durée.

Contrôle du flux et rétropression des flux est une leçon gRPC & High Performance APIs gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage gRPC & High Performance APIs, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours gRPC & High Performance APIs comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Why Flow Control Matters

In a stream, a producer can generate messages far faster than a consumer reads them. Without limits, buffers grow unbounded and memory explodes.

Flow control is the mechanism that keeps producer and consumer in balance.

HTTP/2 Flow Control Windows

gRPC rides on HTTP/2, which has built-in flow control. Each stream and the whole connection has a window — a credit of bytes the sender may transmit.

As the receiver consumes data, it sends WINDOW_UPDATE frames to replenish credit.

What is Backpressure?

Backpressure is the feedback signal that tells a producer to slow down. When the receiver's window is full, the sender simply cannot write more bytes until credit returns.

This naturally throttles a fast sender to the consumer's pace.

Blocking vs Non-Blocking Sends

Different language stubs expose backpressure differently:

  • Blocking stubs: a write blocks until the window allows it
  • Async stubs: a callback or isReady flag tells you when to resume

The isReady Signal (Java)

In Java's async API, CallStreamObserver.isReady() reports whether the transport can accept more messages without buffering.

if (responseObserver.isReady()) {
  responseObserver.onNext(buildChunk());
} else {
  // pause until onReadyHandler fires
}

Reacting to onReady

Register an onReadyHandler so the runtime calls you back when the window reopens, letting you resume sending without busy-waiting.

observer.setOnReadyHandler(() -> {
  while (observer.isReady() && hasMore()) {
    observer.onNext(next());
  }
});

Go Streaming and Backpressure

In Go, stream.Send blocks when the HTTP/2 window is exhausted, giving you implicit backpressure for free. Just loop and send; the call returns when there is room.

for _, item := range items {
  if err := stream.Send(item); err != nil {
    return err
  }
}

Tuning Window Sizes

You can tune flow-control behavior at startup:

  • InitialWindowSize per stream
  • InitialConnWindowSize per connection

Larger windows raise throughput on high-latency links but use more memory.

grpc.WithInitialWindowSize(1 << 20)

Avoiding Unbounded Buffers

A common bug is reading from a database or file faster than the stream drains, buffering everything in memory. Always gate production on the readiness signal so the source is paused too.

Chunking Large Payloads

For big transfers, split data into bounded chunks (e.g. 64 KB) and stream them. Each chunk respects flow control, keeping memory flat regardless of total size.

for offset := 0; offset < len(data); offset += 65536 {
  end := min(offset+65536, len(data))
  stream.Send(&Chunk{Data: data[offset:end]})
}

Operational Tips

Healthy streaming requires monitoring:

  • Watch memory growth on senders
  • Track stalled streams (windows stuck at zero)
  • Combine deadlines with flow control to cap stuck calls

Quick Check

Test your flow control understanding.

Recap

You learned streaming flow control and backpressure:

  • HTTP/2 windows credit how many bytes can flow
  • Backpressure signals a producer to slow down
  • Blocking stubs block; async stubs expose isReady and onReadyHandler
  • Tune window sizes for throughput vs memory
  • Chunk large payloads and gate sources to keep memory flat

Questions Fréquemment Posées

La leçon « Contrôle du flux et rétropression des flux » est-elle gratuite ?

Oui — le texte complet de « Contrôle du flux et rétropression des flux » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours gRPC & High Performance APIs, passe à CoddyKit PRO. Le cours gRPC & High Performance APIs comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Contrôle du flux et rétropression des flux » ?

Maîtrisez la façon dont les flux gRPC gèrent le contrôle du flux et la rétropression, afin que les producteurs rapides ne submergent jamais les consommateurs lents sur des connexions bidirectionnelle… Tu pratiques gRPC & High Performance APIs avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer gRPC & High Performance APIs ?

Aucune expérience préalable n'est requise. gRPC & High Performance APIs sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.

Combien de temps prend la leçon « Contrôle du flux et rétropression des flux » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon gRPC & High Performance APIs ?

Oui. Chaque leçon gRPC & High Performance APIs inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Le flux serveur expliqué
  2. Le flux client expliqué
  3. Flux bidirectionnel
  4. Contrôle du flux et rétropression des flux
← Retour à gRPC & High Performance APIs