Skip to content

Latest commit

 

History

History
135 lines (115 loc) · 2.64 KB

README.md

File metadata and controls

135 lines (115 loc) · 2.64 KB

Demo with grcp_cli

List "Service".

$ grpc_cli ls localhost:50051                  
grpc.reflection.v1alpha.ServerReflection
rpc.Echo
rpc.Greating

Detail

$ grpc_cli ls localhost:50051 -l
filename: reflection/grpc_reflection_v1alpha/reflection.proto
package: grpc.reflection.v1alpha;
service ServerReflection {
  rpc ServerReflectionInfo(stream grpc.reflection.v1alpha.ServerReflectionRequest) returns (stream grpc.reflection.v1alpha.ServerReflectionResponse) {}
}

filename: grpc-echo-server.proto
package: rpc;
service Echo {
  rpc Reply(rpc.ClientRequest) returns (rpc.ServerResponse) {}
}

filename: grpc-echo-server.proto
package: rpc;
service Greating {
  rpc Reply(rpc.GreatingClientRequest) returns (rpc.ServerGreatingResponse) {}
}

You can know "rpc.Echo" and "rpc.Greating" service have "Reply()" method.

Confirm type.

$ grpc_cli type localhost:50051 rpc.ClientRequest                 
message ClientRequest {
  string message = 1 [json_name = "message"];
}

$ grpc_cli type localhost:50051 rpc.GreatingClientRequest         
message GreatingClientRequest {
  .rpc.Format.Greeting client_greeting = 1 [json_name = "clientGreeting"];
}

Test

$ grpc_cli call localhost:50051 rpc.Echo.Reply "message: 'hello'"
connecting to localhost:50051
name: "EchoBot"
message: "hello by EchoBot"
create_time {
  seconds: 1644665166
  nanos: 960671000
}
Rpc succeeded with OK status

$ grpc_cli call localhost:50051 rpc.Greating.Reply "client_greeting: 1"
connecting to localhost:50051
name: "GreetingBot"
format {
  echo: "How are you?"
}
create_time {
  seconds: 1644665114
  nanos: 613346000
}
Rpc succeeded with OK status

How to generate a golang script from a proto file

.proto file

option go_package = "./;rpc";
ex1)
$ protoc \
  -Irpc \
  --go_out=plugins=grpc:./rpc \
  rpc/*.proto

$ tree ./
./
└── proto
    ├── grpc-echo-server.pb.go
    └── grpc-echo-server.proto
    
ex2)
$ protoc \ 
  -Irpc \
  --go_out=plugins=grpc:./api \
  rpc/*.proto

$ tree ./
./
├── api
│   └── grpc-echo-server.pb.go
└── rpc
    └── grpc-echo-server.proto

You should specify the directory where proto file is after -I option.

How to implement

Use RegisterEchoServer() and RegisterGreatingServer.
At this time, you must pass server and Struct to args.

type EchoServerHandler struct{}

type GreetingServerHandler struct {
	name string
}

func NewServerHandler() *GreetingServerHandler {
	return &GreetingServerHandler{
		name: "GreetingBot",
	}
}

func main() {
...
	rpc.RegisterEchoServer(
		server,
		&EchoServerHandler{},
	)

	rpc.RegisterGreatingServer(
		server,
		NewServerHandler(),
	)