ProtoBuf(Protocol Buffers)历史

创建于 2024年3月27日修改于 2024年5月5日
ProtoBuf

RPC


理解为什么 protobuf 被创建以及发展过程中的决定,可以帮助你更好地使用这个工具。

为什么发布 Protocol Buffers?

有几个原因促使 Google 发布 Protocol Buffers。

为什么第一个发布版本是第2版?第1版怎么了?

协议缓冲区的初始版本(“Proto1”)是从2001年初开始开发的,每当有人需要新功能就会为其开发,在多年的时间里不断发展演变。像任何以这种方式创建的东西一样,它有点混乱。直接按照原样发布出去是不可行的。

版本2(“Proto2”)是一个完全的重写,它保留了大部分原有设计,并使用了 Proto1 中的许多实现思路。一些特性被添加,一些被删除。最重要的是,代码被整理清洗了一遍,没有依赖任何尚未开源的 Google 库。

为什么叫“Protocol Buffers”?

这个名称起源于格式的早期阶段,在我们还没有 protocol buffer 编译器为我们生成类的时候。当时有一个称为 ProtocolBuffer 的类,实际上是一个缓冲区。 用户通过调用诸如 AddValue(tag, value) 之类的方法逐个向此缓冲区添加标签/值对。原始字节存储在一个缓冲区中,一旦消息构建完成,就可以将其写出。

在那之后,虽然“缓冲区”这个名字已经失去了意义,但它仍然被习惯性保留了下来。今天,人们通常使用术语“protocol message(协议消息)”来指代抽象意义上的消息,“protocol buffer(协议缓冲)”来指代消息的序列化副本,“protocol message object(协议消息对象)”来指代表示解析消息的内存中的对象。

Google是否在 Protocol Buffers 上拥有任何专利?

Google 目前没有对 protocol buffers 的专利,我们很乐意解决人们可能对相关专利产生的任何疑虑。

Protocol Buffers 与 ASN.1、COM、CORBA 和 Thrift 有何不同?

我们认为所有这些系统都有优点和缺点。Google 在内部依赖 Protocol Buffers。它是很多项目成功的重要成因之一,但这并不意味着它是所有问题的理想解决方案。你应该为你自己的项目酌情评估每个替代方案。

值得注意的是,这些技术中有几种定义了交换格式和 RPC(远程过程调用)协议。Protocol buffers 只是一个交换格式。它们可以很容易地用于 RPC,虽然它确实对定义 RPC 服务支持有限,但它不与任何一个 RPC 实现或协议绑定。