Google protobuf使用技巧和經驗

2022-05-10 19:22:22 字數 1005 閱讀 1650

google protobuf是非常出色的開源工具,在專案中可以用它來作為服務間資料互動的介面,例如rpc服務、資料檔案傳輸等。protobuf為proto檔案中定義的物件提供了標準的序列化和反序列化方法,可以很方便的對pb物件進行各種解析和轉換。以下是我總結的protobuf使用技巧和經驗,分享給大家。

技巧1:使用optional而不是required欄位。

protobuf的可選字段optional是乙個很巧妙的設計,optional欄位是可選的,乙個optional欄位存在與否都不影響proto物件的序列化和反序列化,利用它可以實現資料協議的向後相容和向前相容,即以後增加新的字段,或棄用(注意這裡是棄用而不是刪除)舊字段都不需要修改**。

相比optional欄位,requried欄位要求字段必須存在,否則會導致proto解析失敗。一旦某個欄位被設計為requried型別,將來隨著業務的快速發展可能會成為負擔,因此在使用requried型別時一定要慎重。

技巧2:使用bytes而不是string欄位。

這個技巧要感謝身邊好同事的建議和提醒,protobuf的bytes和string都能表示字串,但是string型別會對字串做utf8格式校驗,而bytes不會,因此使用bytes的編譯碼效率更高。

技巧3:盡可能只維護乙份proto檔案。

技巧4:盡可能減少對其他proto檔案的依賴。

proto應盡量獨立,在某些程式語言如lua中是不支援proto中巢狀其他proto這種方式的,需要手動修改以剔除外部proto依賴,或採用其他辦法解決。另外,減少對其他proto檔案的依賴也有利於對proto的檢視和理解。

技巧5:利用開源工具實現proto和json的轉換。

protobuf的二進位制可讀性不好,遠不如json的可讀性,工程中有很多地方都會涉及proto和json之間的轉換。假如你手頭上有乙個很好用的json開發介面,現在要實現proto和json之間的相互轉換,一定要抵制住造輪子的衝動,而應該去找找json2pb這樣的開源工具。開源工具只需要幾行**就能搞定這樣的需求,又好又快,既能提高工作效率,又可以保證質量。

谷歌 Google ProtoBuf用法例項

這裡貼乙個介紹貼 這裡就介紹怎麼安裝的了,安裝caffe的時候一起安裝的,這裡介紹一下怎麼用這個庫,caffe用他來當資料傳輸說明他很快 新建乙個proto定義資料傳輸的結構,這個和ros上資料傳輸很像 syntax proto2 package caffe 網域名稱 message person ...

Google Protobuf 請求引數為空的案例

google protobuf已經提供了空引數 message empty使用方法,在proto檔案中匯入empty.proto,定義乙個請求引數和返回值為空的函式emptyfunction,函式名字可以自定義。import google protobuf empty.proto service p...

深入淺出Google ProtoBuf中的編碼規則

在開始本部分的內容之前,首先有必要介紹兩個基本概念,乙個是序列化,乙個是反序列化。這兩個概念的定義在網上搜一下都很多的,但大多都講得比較晦澀,不太好理解,在這裡我會用比較通俗的文本來解釋,盡可能讓讀都朋友們一讀就明白是怎麼回事 序列化 是指將結構化的資料按一定的編碼規範轉成指定格式的過程 反序列化 ...