我最近遇到了一个非常大的任务关键型项目,其中包含所有配置 文件是使用文本protobuf定义定义的。配置文件应该是 人类可读和可编辑。
例如
message ServerSettings {
required int32 port = 3022;
optional string name = "mywebserver";
}
我个人觉得这很幽默。 但它实际上是一种合理的保持简单技术,还是显然是愚蠢的?!
换句话说,这有真正的,实际的问题吗?
答案 0 :(得分:2)
如果这是文本proto if format,那么......无论如何,我想。如果它有效,那么它与任何其他序列化格式一样合理。
如果那是原型架构,那么它是非法的(=之后的值应该是字段编号)。
Json或XML可能更典型,但只要它有效,它就不是“愚蠢的”。所以最终的问题是:它有效吗?
答案 1 :(得分:1)
我认为这很聪明。我猜他们通过protoc --encode传递它来生成一个实际解析的二进制文件。
优点: 1.生成代码以解析配置 2.键入验证 3.与键/值相比更强大的配置文件,因为它支持结构,联合,映射和数组 4.配置数据现在是可序列化的,这意味着它可以很容易地暴露给RPC或IPC接口。
缺点: 对于地图/数组,语法可能有点冗长。 2.如果你的内存限制很严重,它需要在目标和libprotobuf.so上安装protoc。