gRPC简介
grpc是google开源的一个高性能,通用的rpc框架,基于http2标准协议设计的,多语言支持。
作为高性能rpc框架,其优点如下
使用Protobuf,既与其他格式兼容,又大大提高了速率,减少了体积
使用HTTP2.0弥补了HTTP1.1的不足
在调用方和服务方使用协议约定文件
初步使用
参考这里
-
安装 Protocol buffer
下载对应版本的压缩包,直接解压,把bin目录加到环境变量里,或者直接把protoc.exe放进GOPATH中的bin中
-
安装相关的go扩展
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26 $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
-
下载示例代码
$ git clone -b v1.35.0 https://github.com/grpc/grpc-go
然后切到目录helloworld中
$ cd grpc-go/examples/helloworld
-
直接go run server与client中的main.go
$ go run greeter_server/main.go
$ go run greeter_client/main.go
然后就会看到
Greeting: Hello world
-
尝试更改这个示例
修改hellworld.proto,添加SayHelloAgain()
// The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply) {} // Sends another greeting rpc SayHelloAgain (HelloRequest) returns (HelloReply) {} } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings message HelloReply { string message = 1; }
然后用之前下载的protoc.exe生成对应的go代码
$ protoc --go_out=. --go_opt=paths=source_relative \ --go-grpc_out=. --go-grpc_opt=paths=source_relative \ helloworld/helloworld.proto
修改server的main.go,添加以下函数
func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello again " + in.GetName()}, nil }
修改client的main.go,在main()函数最后添加
r, err = c.SayHelloAgain(ctx, &pb.HelloRequest{Name: name}) if err != nil { log.Fatalf("could not greet: %v", err) } log.Printf("Greeting: %s", r.GetMessage())
然后run