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.