什么是 Google Protocol Buffer?
Google Protocol Buffer( 簡(jiǎn)稱 Protobuf) 是 Google 公司內(nèi)部的混合語(yǔ)言數(shù)據(jù)標(biāo)準(zhǔn),目前已經(jīng)正在使用的有超過(guò) 48,162 種報(bào)文格式定義和超過(guò) 12,183 個(gè) .proto 文件。他們用于 RPC 系統(tǒng)和持續(xù)數(shù)據(jù)存儲(chǔ)系統(tǒng)。
Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,或者說(shuō)序列化。它很適合做數(shù)據(jù)存儲(chǔ)或 RPC 數(shù)據(jù)交換格式??捎糜谕ㄓ崊f(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。目前提供了 多種語(yǔ)言的API,包括C++、 C# 、GO、 JAVA、 PYTHON
如果你并不了解Protobuf能做什么,建議結(jié)合google搜索關(guān)鍵字,看一下入門級(jí)別的文章,或者看一下官方文檔中的Developer Guide,或者中文的開發(fā)指南 .官方的文檔中有各種語(yǔ)言相關(guān)的示例,可以結(jié)合代碼看一下實(shí)際的用法。
很多人說(shuō)為什么不用json(或者xml), 答案很簡(jiǎn)單,Protobuf更小,更簡(jiǎn)潔,而且序列化和反序列化更快!
谷歌最新開源的gRpc框架就是默認(rèn)使用Protobuf作為數(shù)據(jù)傳輸格式和服務(wù)描述文件。對(duì)于gRpc 就不做詳細(xì)介紹了,有興趣的可以看一下官網(wǎng)。
言歸正傳,在實(shí)際使用Protobuf過(guò)程中,我發(fā)現(xiàn)Protobuf不但可以編寫描述消息(Message)的內(nèi)容,同時(shí)可以表述其他方法(類似Rpc中的方法),主要是gRpc中看到的。同時(shí)在Protobuf 代碼生成工具的包中,有一個(gè)這樣的目錄,一致以來(lái)都沒搞明白是做什么用的,如下圖:
在目錄中存在大量已經(jīng)定義好的proto文件,其實(shí)這些文件是Protobuf的描述文件,類似元數(shù)據(jù)。用本身的語(yǔ)法描述本身,同時(shí)通過(guò)這些文件生成對(duì)應(yīng)的語(yǔ)言的元數(shù)據(jù)類等代碼,比如在C#版本的Google.Protobuf中就能看到上述描述文件生成的類,如下圖所示