Server-side streaming returns an Observable<T> from the handler. Client-side streaming receives an Observable<T> as the first argument. Bidirectional streaming both receives and returns an Observable. NestJS maps these to the gRPC streaming types via @GrpcStreamMethod() and @GrpcStreamCall() decorators.
Server streaming — use for large dataset exports; client receives items as they become available.
Client streaming — use for bulk ingestion; server processes a stream of items and returns a summary.
Bidirectional streaming — use for real-time chat or live feeds; both sides send and receive concurrently.
@GrpcStreamMethod() handles all streaming types — NestJS infers direction from the Observable positions.
HTTP/2 multiplexing enables many concurrent streams over a single connection — very efficient for bulk transfers.