go语言快速使用gRPC

sasuke.cn
gRPC官网文档学习笔记

快速开始

先决条件

gRPC需要1.6+版本的go。

安装gRPC

$ go get -u google.golang.org/grpc

安装Protocol Buffers v3

安装编译器protoc,用来生成gRPC服务代码。前往https://github.com/google/protobuf/releases下载适合你的电脑预编译二进制文件,文件名一般为protoc-<version>-<platform>.zip

  • 解压文件
  • 将protoc二进制文件路径加入到PATH环境变量

然后安装go版本的protoc插件。

$ go get -u github.com/golang/protobuf/protoc-gen-go

该插件的二进制路径也需要加入到PATH环境变量。

$ export PATH=$PATH:$GOPATH/bin

Examples

前面安装的google.golang.org/grpc包中就包含了许多例子。
尝试编译这个例子。

$ cd $GOPATH/src/google.golang.org/grpc/examples/helloworld/helloworld

gRPC服务定义文件一般为.proto文件,protoc 处理.proto文件会生成相应的.pb.go文件。
当前示例文件夹中已经通过编译helloworld.proto文件生成了helloworld.pb.go文件,该文件主要包含:

  • 生成的client和server代码
  • populating/serializing/retrieving HelloRequestHelloReply的代码。

运行

  • 服务端
$ cd $GOPATH/src/google.golang.org/grpc/examples/helloworld
$ go run greeter_server/main.go
  • 客户端
$ go run greeter_client/main.go
# => Greeting: Hello world

尝试修改

学习更多定义gRPC服务可以访问gRPC Basics: GO
现在只需要知道在刚刚的例子中,server和client的stub都有一个SayHello RPC方法,服务端接收client发送来的HelloRequest参数,
并返回HelloReply response给client。

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

现在给Greeter服务增加一个方法,如下:

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

...

编译

$ protoc -I helloworld/ helloworld/helloword.proto -go_out=plugins=grpc:helloworld

更新服务端代码

// greeter_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
}

更新客户端代码

// greeter_client/main.go
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())

运行

重新启动服务端,运行客户端

下一步

学习更多go - gRPC:gRPC Basics: Go

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容