LDJC1~2DZ{IX~FVJZ[PJ2HB.png

gRPC 是 Google 开源的一个高性能的 RPC(Remote Procedure Call) 框架,它具有如下的优点:

  • 提供高效的进程间通信。gRPC 没有使用 XML 或者 JSON 这种文本格式,而是采用了基于 protocol buffers 的二进制协议;同时,gRPC 采用了 HTTP/2 做为通信协议,从而能够快速的处理进程间通信。
  • 简单且良好的服务接口和模式。gRPC 为程序开发提供了一种契约优先的方式,必须首先定义服务接口,才能处理实现细节。
  • 支持多语言。gRPC 是语言中立的,我们可以选择任意一种编程语言,都能够与 gRPC 客户端或者服务端进行交互。
  • 成熟并且已被广泛使用。通过在 Google 的大量实战测试,gRPC 已经发展成熟。

下面通过一个简单的 demo 来初步了解 gRPC 的使用。

我们构建一个商品服务,命名为 ProductInfo,客户端和服务端的交互模式如下:

FGS{9{MYZ3Q8)Y1LV6C)8VO.png

首先我们需要定义 protobuf:

protoc --go_out=plugins=grpc:../product ProductInfo.proto
go get -u github.com/golang/protobuf/protoc-gen-go
ProductInfo.pb.go

NX[0Z~6WC1]IH3ET){45@9X.png

main.go

服务端的逻辑就到这里了,接下来再写一下客户端的逻辑,建立一个 client 文件夹,然后新建一个 main.go 文件,内容如下:

然后先启动 server/main.go ,再启动 client/main.go,这样一次服务端和客户端之间的连接便完成了,可以看到运行的结果输出了:

O2G1F{3{SQGIS5GX)X}LS35.png

当然你也可以在服务端的方法中,加上一些日志来验证一下。

最后,这个小的 demo 的目录结构就是这样的:

@Q]~SVUG{2]E0AT7SN1{%KL.png

项目的代码在我的GitHub 上:https://github.com/roseduan/grpc-demo