Back to Go Zero

Example 10: Streaming RPC

tools/goctl/rpc/example/10-streaming/README.md

1.10.11.7 KB
Original Source

Example 10: Streaming RPC

This example demonstrates all three gRPC streaming patterns: server streaming, client streaming, and bidirectional streaming.

Proto Definition

stream.proto defines three RPC methods demonstrating each streaming pattern.

The go_package uses a full module path:

protobuf
option go_package = "example.com/demo/pb";

Generation Commands

First, initialize the output directory with a go.mod:

bash
mkdir -p output && cd output && go mod init example.com/demo && cd ..

Then generate the code:

bash
goctl rpc protoc stream.proto \
  --go_out=output \
  --go-grpc_out=output \
  --zrpc_out=output \
  --go_opt=module=example.com/demo \
  --go-grpc_opt=module=example.com/demo \
  --module=example.com/demo \
  -I .

Generated directory structure:

output/
├── etc
│   └── streamsvc.yaml
├── go.mod
├── internal
│   ├── config
│   │   └── config.go
│   ├── logic
│   │   ├── bidistreamlogic.go
│   │   ├── clientstreamlogic.go
│   │   └── serverstreamlogic.go
│   ├── server
│   │   └── streamserviceserver.go
│   └── svc
│       └── servicecontext.go
├── pb
│   ├── stream.pb.go
│   └── stream_grpc.pb.go
├── streamservice
│   └── streamservice.go
└── streamsvc.go

Key Points

  • Supports three streaming patterns: server streaming (stream on response), client streaming (stream on request), and bidirectional streaming (stream on both).
  • goctl generates separate logic files for each streaming RPC method.
  • Streaming client code is not auto-generated; use the gRPC client directly.