proto file
.proto file that defines the gRPC service and messages
compile
Use protoc to generate client and server code for both languages
When you compile .proto
files using protoc
, it generates two Go files: xxx.pb.go
and xxx_grpc.pb.go
. These files are essential for both client and server implementations in a gRPC service. Here’s how they fit into the architecture:
xxx.pb.go
- Purpose: Contains the Go representations of the protocol buffer messages defined in the
.proto
file. - Usage: Used by both client and server to serialize and deserialize the messages.
- Contents:
- Go structs for each message type.
- Methods for marshaling and unmarshaling these structs to and from binary format.
xxx_grpc.pb.go
- Purpose: Contains the gRPC service definitions and client/server interfaces.
- Usage:
- Server: Implements the server-side logic by embedding the generated server interface.
- Client: Uses the generated client interface to make RPC calls.
- Contents:
- Server interface with methods corresponding to the RPCs defined in the
.proto
file. - Client interface with methods to call the RPCs.
- Registration functions to register the server with a gRPC server.
- Handler functions to handle incoming RPC calls.
- Server interface with methods corresponding to the RPCs defined in the
client and server
Client Code
- References: Both
xxx.pb.go
andxxx_grpc.pb.go
. - Functionality:
- Uses the client interface from
xxx_grpc.pb.go
to make RPC calls. - Constructs request messages using the structs from
xxx.pb.go
.
- Uses the client interface from
Server Code
- References: Both
xxx.pb.go
andxxx_grpc.pb.go
. - Functionality:
- Implements the server interface from
xxx_grpc.pb.go
. - Handles incoming requests and constructs response messages using the structs from
xxx.pb.go
.
- Implements the server interface from
Example
In the provided example:
Client Code (
examples/helloworld/greeter_client/main.go
):- Uses
pb.NewGreeterClient
fromhelloworld_grpc.pb.go
to create a client. - Constructs
HelloRequest
messages using the struct fromhelloworld.pb.go
.
- Uses
Server Code (
examples/helloworld/greeter_server/main.go
):- Implements
GreeterServer
interface fromhelloworld_grpc.pb.go
. - Constructs
HelloReply
messages using the struct fromhelloworld.pb.go
.
- Implements
This architecture ensures that both client and server have a consistent and type-safe way to communicate using the protocol buffer messages and gRPC service definitions.