protobuf | grpc
rpc方法定义结尾的分号可有可无
其余的结构定义 都要有:
serveice和rpc统一使用驼峰式命名
修饰词 required\optional \repeated
enum 采用驼峰命名;字段采用大写加下划线书写
限定修饰符 | 数据类型 | 字段名称 | = | 字段编码值 | [字段默认值]
字段编码值
有了该值,通信双方才能互相识别对方的字段,相同的编码值,其限定修饰符和数据类型必须相同,编码值的取值范围为 1~2^32(4294967296) 其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低,所以建议把经常要传递的值把其字段编码设置为1-15之间的值 1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用
数据类型
N 表示打包的字节并不是固定。而是根据数据的大小或者长度
关于 fixed32 和int32的区别。fixed32的打包效率比int32的效率高,
但是使用的空间一般比int32多。因此一个属于时间效率高,一个属于空间效率高
syntax = "proto3";
// 注释 enum Foo {
FIRST_VALUE = 1;
} service Greeter { rpc Hello(Request) returns (Response) {} } message Request { required string name = 1;
message Result{
}
}
message Response {
message Result {
} repeated Result greeting = 2;
}
proto3支持map类型声明 map<key_type, value_type> map_field = N; message Project {...} map<string, Project> projects = 1; 键、值类型可以是内置的类型,也可以是自定义message类型 字段不支持repeated属性