歷史

關於 Protocol Buffers 建立的簡要歷史。

瞭解 protobuf 的建立原因以及隨時間發生的變化,有助於您更好地利用該工具的特性。

為什麼釋出 Protocol Buffers?

我們釋出 Protocol Buffers 有幾個原因。

Protocol buffers 在 Google 的許多專案中使用。我們還有其他一些專案希望開源,但這些專案使用了 protocol buffers,因此,為了做到這一點,我們首先需要釋出 protocol buffers。事實上,這項技術的一部分已經公開;如果您深入研究 Google AppEngine 的程式碼,可能會找到一些。

我們希望提供接受 protocol buffers 和 XML 的公共 API,這既是因為它更有效率,也是因為我們最終都會在後端將其 XML 轉換為 protocol buffers。

我們認為 Google 以外的人可能會覺得 protocol buffers 有用。將 protocol buffers 整理成我們樂於釋出的形態是一項有趣的副專案。

為什麼第一個釋出版本是 2?版本 1 發生了什麼?

Protocol buffers 的初始版本(“Proto1”)於 2001 年初開始開發,並在多年中不斷演進,每當有人需要新功能並願意為此付出努力時,它就會湧現出新功能。與以這種方式建立的任何事物一樣,它有點混亂。我們得出結論,無法以現有形式釋出程式碼。

版本 2(“Proto2”)進行了徹底重寫,儘管它保留了大部分設計,並沿用了 Proto1 的許多實現思路。添加了一些功能,移除了一些功能。但最重要的是,程式碼得到了清理,並且不再依賴尚未開源的 Google 庫。

為什麼叫做“Protocol Buffers”?

這個名字起源於該格式的早期,那時我們還沒有 protocol buffer 編譯器來為我們生成類。當時,有一個名為 ProtocolBuffer 的類,它實際上充當了單個方法的緩衝區。使用者可以透過呼叫 AddValue(tag, value) 等方法單獨向此緩衝區新增標籤/值對。原始位元組儲存在緩衝區中,一旦訊息構建完成,就可以將其寫出。

從那時起,“buffers”這個名字的含義已經丟失,但它仍然是我們使用的名稱。如今,人們通常使用“protocol message”來指代抽象意義上的訊息,“protocol buffer”來指代訊息的序列化副本,而“protocol message object”則指代表示已解析訊息的記憶體物件。

Google 是否擁有 Protocol Buffers 的專利?

Google 目前沒有任何已授權的 protocol buffers 專利,我們樂於解決人們可能對 protocol buffers 和專利產生的任何擔憂。

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

我們認為所有這些系統都有其優點和缺點。Google 在內部使用 protocol buffers,它們是我們成功的關鍵組成部分,但這並不意味著它們是解決所有問題的理想方案。您應該根據您自己專案的具體情況來評估每種替代方案。

不過,值得注意的是,其中一些技術同時定義了交換格式和 RPC(遠端過程呼叫)協議。Protocol buffers 僅僅是一種交換格式。它們可以很容易地用於 RPC — 事實上,它們確實對定義 RPC 服務有有限的支援 — 但它們不與任何特定的 RPC 實現或協議繫結。