1、ProtoBuf 协议数据结构定义规则
message 消息结构类型名{
限定修饰符 数据类型 字段名 = 字段编码值 [字段默认值];
}
1.1限定修饰符类型及意义:
1) required 说明字段为必备字段,发送方必须设置该字段,接收方必须识别到该字段,否则会导致编码失败。
2) optional 说明字段为可选字段,可以不设置其值。发送方可以选择性的设置,接收方如果没有识别到也不会有问题。
3) repeated 表示字段可以包含多个,其属性和optional相同,只是它这个字段可以设置多个,相当于一个数组。
1.2 数据类型
基本数据类型如下:
1.3 字段名
字段的标示名,命名规则建议用下划线分割的驼峰法如first_name
1.4 字段编码值
用于通信双方识别对方的字段,通过同一份协议的结构体每个编码值对应的数据字段是一样的。取值范围是 1 ~ 2^32 (4294967296)
1.5 默认值(可选配置)
对于require 的字段,设置默认值,会在发送方没有设置此字段时发送这个默认字段。
对于optional 的字段,设置默认值,会在接收方没有接受到字段时使用这个默认字段。
message 可以嵌套定义,其定义的数据类型可以直接使用
message LoginMessage{
messageAccount{
require string name = 1;
require string passwd = 2;
}
require Accountaccount = 1;
require int32 time = 2;
}
enum枚举的定义和C++相同,但是有一些限制。
枚举值必须大于等于0的整数。
使用分号(;)分隔枚举变量而不是C++语言中的逗号(,)
eg.
enum VoipProtocol
{
H323 = 1;
SIP = 2;
MGCP = 3;
H248 = 4;
}