ProtocolBuffer基本语法
# 简介
- 习惯用 Json、XML 数据存储格式的你们,相信大多都没听过Protocol Buffer
- Protocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json、XML 真的强!太!多!
应用场景:传输数据量大 & 网络环境不稳定 的数据存储、RPC 数据交换 的需求场景
他可以生成多种语言,Java、C++、Go、Python、C#、Dart。
# 定义一个message
这个message相当于是一个实体类型,可以假象为一个JavaBean一样的东西,但是不止于此。
syntax = "proto3";
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
}
1
2
3
4
5
6
7
2
3
4
5
6
7
在Java里面的体现
class SearchRequest {
private string query;
private page_number;
private result_per_page;
}
1
2
3
4
5
2
3
4
5
# 成员变量的介绍
语法格式: [数量修饰符] 类型修饰符 变量名称 = 标记序号
message SearchRequest {
repeated string query = 1;
repeated int32 page_number = 2;
int32 result_per_page = 3;
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
Corpus corpus = 4;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 数量修饰符
- required:必须填写的字段
- repeated:可以重复出现的,也就是数组或List
- optional:可选值
# 支持的类型
# 默认值
- For strings, the default value is the empty string.
- For bytes, the default value is empty bytes.
- For bools, the default value is false.
- For numeric types, the default value is zero.
- For enums, the default value is the first defined enum value, which must be 0.
# 标记序号
如您所见,消息定义中的每个字段都有一个唯一的编号。这些字段号用于标识消息二进制格式的字段,一旦使用了消息类型,就不应更改它们。
# 定义Service
service SearchService {
rpc Search(SearchRequest) returns (SearchResponse);
}
1
2
3
2
3
可以将他看作一个rpc的接口,里面有一个名字为Search的方法,入参为SearchRequest,相应结果为SearchResponse。可以定义多个,格式相同,SearchRequest也就是message类型的
# 例子
syntax = "proto3";
option java_multiple_files = true;
option java_package = "com.unclezs";
option java_outer_classname = "MyGrpcService";
option objc_class_prefix = "HLW";
// The greeting service definition.
service MyGrpcServer {
// Sends a greeting
rpc handle (Request) returns (Response) {}
}
// The request message containing the user's name.
message Request {
string name = 1;
repeated string list = 2;
}
// The response message containing the greetings
message Response {
string message = 1;
string test=2;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 更多
在 GitHub 编辑此页 (opens new window)
上次更新: 2024/02/25, 12:11:11