如何选择协议缓冲区的标签

时间:2013-11-13 17:51:38

标签: encoding tags protocol-buffers

这是一个real-life例子;手写的.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;
}

我理解它的一切,除了编写它的程序员如何选择他将要使用的标签号。

官方documentation只是注意这些标签是如何移动并编码以组成线型标识符的。但是,在上面的示例中,相同数据类型的多个字段具有不同的标记号。

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

1 个答案:

答案 0 :(得分:3)

除了名称之外,该号码只是识别字段的另一种方法。编码使用数字而不是名称,因为它们占用的空间和时间更少。只要您以后不更改数字,使用哪个数字并不重要(尽管较低的数字会减少电线上的空间)。

通常,人们只是从1开始按顺序分配数字。在你的示例proto中,cache_hits可能是在所有其他字符之后添加的新字段,这就是为什么它的数字显示为“乱序”的原因