目录

dubbo-go-Protocol Buffers

Protocol Buffers

语法
  • 版本号:第一行为版本号。

  • message定义了传输的对象,对于每一个定义的基础类型,后面的编号决定了其在对象序列化中的位置。其中1-15在序列化的过程中只需要占用1Byte,而其他16-2047需要占用2Byte。

1
2
3
4
5
6
7
syntax = "proto3";

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
}
  • 允许对象的嵌套。
序列化
整数:Varint

https://picture-table.oss-cn-beijing.aliyuncs.com/img/image-20220518223452238.png

varint把每个byte当作一个chunk,当msb是0的时候,表示这是最后一个chunk。

1
2
3
4
5
6
7
x:10->[0x08 0x0a]
# 0x0a = 0000 1010 首位为0表示为最后一个Byte 10
x:300->[0x08 0xac 0x02]
# 0xac 0x02 = 1010 1100 0000 0010
# 第一个byte首位不为0, b1 = 010 1100, b0 = 000 0010
# 编码之后为大端法,转换为x86小端法表示。
# num = b0 + b1

参考链接