首先,什么是Protocol Buffers?文档中说:
“Protocol Buffers是一种以有效并可扩展的格式编码结构化数据的方式。”
一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明显的。。。。
当大多数公司还在纠结于如何更好提高MobileAPI的性能时,有的公司已经开始抛弃http + json,开始走向tcp + protobuf的路线了。。。。
相比在使用Restful方式完成服务之间的相互访问,GRPC能提供更好的性能,更低的延迟,并且生来适合分布式系统。
同时基于标准化的IDL(ProtoBuf)来生成服务器端和客户端代码, ProtoBuf服务定义可以作为服务契约,因此可以更好的支持团队与团队之间的接口设计,开发,测试,协作等等。
因此在很多对于应用性能有较高要求的情况下,对外使用Restful提供API接口以支持不同的客户端渠道(Web, Mobile)而服务与服务之间则采用RPC方式进行交互。
gRPC基于HTTP/2标准设计,所以相对于其他RPC框架,gRPC带来了更多强大功能,如双向流、头部压缩、多复用请求等。
总之:相同的数据量protobuf比json速度快了不是一星半点。
系统:win10 64位
protobuf:protoc-3.5.1
protoc下载地址:https://github.com/google/protobuf/releases
文件名称:protoc-3.5.1-win32.zip
安装 goprotobuf
1.从 github.com/google/protobuf/releases 获取 Protobuf编译器 protoc(可下载到 Windows下的二进制版本)
1、解压缩protoc文件在c盘根目录;
2、“环境变量” -> “系统变量” -> 双击修改 变量”path” ,追加以下内容:
C:\protoc-3.51-win32\bin
3、打开cmd执行
protoc --version
命令行回复信息:
libprotoc 3.5.1
安装完毕。
2.获取 goprotobuf提供的 Protobuf编译器插件 protoc-gen-go(被放置于 $GOPATH/bin下,$GOPATH/bin应该被加入 PATH环境变量,以便 protoc能够找到 protoc-gen-go)
此插件被protoc 使用,用于编译.proto 文件为Golang 源文件,通过此源文件可以使用定义在.proto 文件中的消息。
go get github.com/golang/protobuf/protoc-gen-go
cd github.com/golang/protobuf/protoc-gen-go
go build
go install
3.获取 goprotobuf提供的支持库,包含诸如编码(marshaling)、解码(unmarshaling)等功能
go get github.com/golang/protobuf/proto
cd github.com/golang/protobuf/proto
go build
go install
Hello gRPC
这里通过一个例子来说明用法。: