gRPC
A high-performance, open-source universal RPC framework。
使用 #gRPC ,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就好像它是一个本地对象一样,更容易创建分布式应用程序和服务。
客户端与服务端通信流程:
gRPC 使用protocol buffers作为它的接口定义语言(IDL)和底层的消息交换格式。
使用
protoc安装:
$ brew install protobuf
# 查看版本
$ brew --version
go插件安装:
go install google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
proto定义示例
syntax = "proto3";
package bookreceive;
option go_package = "./api/protobuf-spec/bookreceive";
service Receive {
rpc Receive (ReceiveRequest) returns (ReceiveReply) {}
}
message ReceiveRequest {
repeated ReceiveInfo ReceiveInfos = 1;
}
message ReceiveInfo {
int64 bookId = 1;
string IMEI = 2;
}
message ReceiveReply {
int32 code = 1;
}
生成grpc代码:
protoc -I. api/protobuf-spec/bookreceive/receive.proto --go_out=. --go-grpc_out=.
-I指定生成代码目录 –go_out指定序列化处理代码生成路径 –go-grpc_out指定grpc代码生成路径 –proto_path=src指定proto所在目录
生成代码文件:receive.pb.go、receive_grpc.pb.go
- Code for populating, serializing, and retrieving Request and Reply message types.
- Generated client and server code.
gRPC流
传统的RPC方法调用对于上传和下载较大数据量场景并不适合。同时传统RPC模式也不适用于对时间不确定的订阅和发布模式。为此,gRPC框架针对服务器端和客户端分别提供了流特性。
相关资料:
官方介绍:https://grpc.io/docs/what-is-grpc/introduction/
go gRPC https://grpc.io/docs/languages/go/quickstart/
Protocol Buffers: https://developers.google.com/protocol-buffers/docs/overview
go protocol format: https://developers.google.com/protocol-buffers/docs/gotutorial
https://grpc.io/docs/languages/php/quickstart/ php grpc : https://github.com/grpc/grpc/tree/master/src/php#protoc-compiler
go tool cover -html=test-report-unit/cover.out -o test-report-unit/index.html