简单介绍gRPC和ProtoBuf,以及gRPC和ProtoBuf的安装和简单使用,并用golang实现简单RPC服务。
gRPC简介
gRPC 是由Google开发的远程过程调用开源框架,支持多种开发语言,且支持跨语言通信。是基于HTTP2通信协议标准设计开发,默认采用Protocol Buffers数据序列化协议。
安装
1 | go get google.golang.org/grpc |
ProtoBuf简介
gRPC跨语言的支持都是通过Protocol Buffers
这个东西,它是一个代码生成工具以及序列化工具。它可以把我们定义好的方法和数据结构转化成指定语言的代码。同时能将我们请求和响应的数据编码成gRPC能传输的形式,又能将数据序列化和反序列化成该语言能处理的形式。
安装
1 | brew info protobuf |
使用命令
这里不整理Protobuf文件的语法,Protobuf语法看这里。
1 | protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/fileName.proto |
$SRC_DIR : 待编译的proto文件所在目录
$DST_DIR:生成后的代码所存放的目录
简单示例
First: proto文件编写和生成源码
proto文件书写,先定义该通信用到的数据类型和结构,请求和响应的数据模型。
1 | message Massage { |
再定义该通信的方法,只需要定义方法名、请求参数、响应参数即可。
1 | service HelloService{ |
通过protoc命名生成指定语言的代码,这里是生成go语言的代码。
1 | protoc --go_out=. massage.proto |
Second: Server代码编写
HelloService方法的具体实现,这里简单实现。
1 | func (h *helloService) Hello(c context.Context, requestMessage *protobuf.Massage) (responseMessage *protobuf.Massage, err error) { |
创建rpc服务,注册通信方法的具体实现。
1 | server := grpc.NewServer() |
监听端口,至此简单的rpc服务就写完了。
1 | listen, err := net.Listen("tcp", "localhost:9000") |
Third:Client代码编写
创建rpc客户端,建立连接。
1 | conn, err := grpc.Dial("localhost:9000", grpc.WithInsecure()) |
发送请求信息以及读取响应信息。
1 | requestMessage := &protobuf.Massage{Request: "world "} |
项目源码
1 | git clone https://github.com/zhouxuwen/grpcdemo-go.git |