gRPC是Google开源的一个跨语言和平台的高性能RPC框架。
他的主要特性有:
使用基于HTTP/2的传输协议。带来诸如双向流、流控、头部压缩、单TCP连接上的多复用请求等特性。 使用基于ProtoBuf3.x的数据序列化协议。 可以自动生成多种语言的代码 在这个项目中,我将演示如何使用gRPC创建一个简单的服务,我会用Go作为服务端提供服务,Python3作为客户端调用服务。
在这里,客户端会向服务端发送一组账号和密码。服务端接收到账号和密码后,会将其打印出来,同时拼接后进行Base64编码,然后再返回给客户端。
下面我们就正式开始。
1. 定义数据格式
首先我们使用protobuf定义传输的数据格式.这里我们需要创建protobuf/auth.proto文件,并在里面定义我们要传输和返回的数据格式,以及可以被远程调用的函数。代码看这里。
syntax = "proto3";
option go_package = "protobuf";
package auth;
// 定义客户端要发送的数据格式
message Request {
string username = 1;
string password = 2;
}
// 定义服务端返回的数据格式
message Response {
string result = 1;
}
// 定义可以被远程调用的函数
service AUTH {
rpc AuthLogin (stream Request) returns (stream Response) {}
}
2. 自动生成代码
定义好数据格式以后,我们要使用protoc自动生成客户端和服务端代码。这里你需要先安装protoc。
mac用户可以直接用 brew install protobuf 安装。
1.首先生成Python3需要使用的代码。
使用 pip3 install -r requirements.txt 命令安装Python3所需要的包
python3 -m grpc_tools.protoc -I protobuf/ --python_out=./protobuf --grpc_python_out=./protobuf protobuf/auth.proto
这条命令会自动在protobuf文件夹中生成文件 auth_pb2.py 和 auth_pb2_grpc.py 2.生成Go需要使用的服务端代码 使用 go get -u google.golang.org/grpc 安装 go 的 grpc,由于墙的原因,我们可能需要一些别的方法,看这里。
git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
cd $GOPATH/src/
go install google.golang.org/grpc
protoc -I protobuf/ --go_out=plugins=grpc:protobuf/ protobuf/auth.proto
3. 编写服务端和客户端代码
Go服务端代码请看看server.go文件。
Python客户端代码请看client.py文件。
4. 运行服务
启动Server:
go run server.go
启动client:
python3 client.py
可以看到server收到账号密码,拼接在一起后对其进行Base64编码,然后返回给了客户端。
|