Encoding 如何选择协议缓冲区';s标签

Encoding 如何选择协议缓冲区';s标签,encoding,tags,protocol-buffers,Encoding,Tags,Protocol Buffers,这里有一个例子;手写.proto文件提取: message StatsResponse { optional int64 gets = 1; optional int64 cache_hits = 12; optional int64 fills = 2; optional uint64 total_alloc = 3; optional CacheStats main_cache = 4; optional CacheStats hot_cache = 5; opt

这里有一个例子;手写
.proto
文件提取:

message StatsResponse {
  optional int64 gets = 1;
  optional int64 cache_hits = 12;
  optional int64 fills = 2;
  optional uint64 total_alloc = 3;
  optional CacheStats main_cache = 4;
  optional CacheStats hot_cache = 5;
  optional int64 server_in = 6;
  optional int64 loads = 8;
  optional int64 peer_loads = 9;
  optional int64 peer_errors = 10;
  optional int64 local_loads = 11;
}
我了解它的一切,除了编写它的程序员如何选择他将要使用的标签号

这位官员只是注意到这些标签是如何变换和编码的,以组成一个导线类型标识符。然而,在上面的示例中,相同数据类型的几个字段具有不同的标记号


我的问题是,;如果要从头开始编写
.proto
文件,如何选择标记号?

该编号只是识别字段的另一种方法,而不是其名称。编码使用数字而不是名称,因为编码占用的空间和时间更少。只要以后不更改号码,使用什么号码并不重要(尽管数字越小,线路上占用的空间越小)


通常,人们只是从1开始按顺序分配数字。在您的示例proto中,
cache\u hits
可能是在所有其他字段之后添加的一个新字段,这就是它的数字出现“无序”的原因。

此外,较小的数字在二进制消息中占用的空间较小。从内存<16一字节,16->2047,2字节等。