Phase 27 of 30 · Topic 27.2

gRPC Streaming Modes (Server, Client & Bidirectional)

1Concept

gRPC supports 4 communication patterns: Unary (Request/Response), Server Streaming (Server pushes data stream), Client Streaming (Client streams batch), and Bidirectional Streaming.

2Architecture Diagram

1. Unary:        Client ──[Request]──> Server ──[Response]──> Client
2. Server Stream:Client ──[Request]──> Server ──[Stream Item 1]──[Stream Item 2]...>
3. Bidi Stream:  Client <──[Continuous Stream Over HTTP/2]──> Server

3Code Example

C# 13 & .NET 9
using System;

public class GrpcStreamingConceptDemo
{
    public static void Main()
    {
        Console.WriteLine("Server Streaming gRPC handler:");
        Console.WriteLine("public override async Task StreamLogs(LogRequest request, IServerStreamWriter<LogResponse> responseStream, ServerCallContext context)");
        Console.WriteLine("{");
        Console.WriteLine("    await responseStream.WriteAsync(new LogResponse { Message = "Log 1" });");
        Console.WriteLine("}");
    }
}

4Expected Output

Server Streaming gRPC handler:
public override async Task StreamLogs(LogRequest request, IServerStreamWriter<LogResponse> responseStream, ServerCallContext context)
{
    await responseStream.WriteAsync(new LogResponse { Message = "Log 1" });
}

5Key Takeaways

  • Server streaming is ideal for real-time telemetry, logs, and notification feeds.
  • Bidirectional streaming enables full-duplex chat and trading order matching.
  • Always forward `ServerCallContext.CancellationToken` to cancel server work if the client disconnects.