Chapter 15: Streaming Deep Dive — Flow Control and Backpressure

Flow Control in Streaming

HTTP/2 flow control prevents a fast producer from overwhelming a slow consumer. Each side advertises a window size (bytes it can accept). Sender must not exceed it.

// Server streaming: server sends faster than client reads
// Without flow control: server fills network buffers → OOM
// With flow control: server blocks when window is full

// In C++ server streaming:
while (has_more_data) {
  // Write() returns false if flow control blocks
  if (!writer->Write(msg)) {
    // Client disconnected or flow control issue
    break;
  }
}

Backpressure

Fast Producer Slow Consumer │ │ │── msg 1 ──────────────────────►│ (processes) │── msg 2 ──────────────────────►│ (processes) │── msg 3 ──────────────────────►│ (buffer filling) │── msg 4 ──────────────────────►│ (buffer full!) │ │ │◄── WINDOW_UPDATE (0) ─────────│ "stop sending!" │ (Write() blocks) │ │ │ (catches up...) │◄── WINDOW_UPDATE (+N) ────────│ "OK, send more" │── msg 5 ──────────────────────►│

Best Practices for Streaming