传递数据格式:ProtoBuf
需要工具主要包括:
- 编译器:protoc,以及一些官方没有带的语言插件;
- 运行环境:各种语言的 protobuf 库,不同语言有不同的安装来源;
语法类似 C++ 语言,可以参考 语言规范。
比较核心的,message
是代表数据结构(里面可以包括不同类型的成员变量,包括字符串、数字、数组、字典……),service
代表 RPC 接口。变量后面的数字是代表进行二进制编码时候的提示信息,1~15 表示热变量,会用较少的字节来编码。另外,支持导入。
默认所有变量都是可选的(optional),repeated 则表示数组。主要 service rpc 接口只能接受单个 message 参数,返回单个 message;
syntax = "proto3";
package hello;
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
repeated int32 number=4;
}
service HelloService {
rpc SayHello(HelloRequest) returns (HelloResponse){}
}
编译最关键参数是指定输出语言格式,例如,python 为 --python_out=OUT_DIR
。
一些还没有官方支持的语言,可以通过安装 protoc 对应的 plugin 来支持。例如,对于 Go 语言,可以安装
$ go get -u github.com/golang/protobuf/{protoc-gen-go,proto} // 前者是 plugin;后者是 go 的依赖库
之后,正常使用 protoc --go_out=./ hello.proto
来生成 hello.pb.go,会自动调用 protoc-gen-go
插件。
ProtoBuf 提供了 Marshal/Unmarshal
方法来将数据结构进行序列化操作。所生成的二进制文件在存储效率上比 XML 高 3~10 倍,并且处理性能高 1~2 个数量级。
安装Protobuf编译工具
$ wget https://github.com/google/protobuf/releases/download/v3.2.0/protobuf-php-3.2.0.tar.gz
$ tar -zxvf protobuf-php-3.2.0.tar.gz
$ cd protobuf-php-3.2.0
$ ./configure --prefix=/usr/local/protobuf
$ sudo make
$ sudo make install
检测是否安装成功, /usr/local/protobuf/bin/protoc –version
安装成功后,请将protoc可执行文件copy或者软链到/usr/local/bin和/usr/bin目录下
Golang相关依赖
安装官方安装命令:
$ go get google.golang.org/grpc
是安装不上的,会报:
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/grpc?go-get=