Protobuf配置與安裝
1 安裝與配置
1、protobuf是google公司提出的數據存儲格式,詳細介紹可以參考:https://code.google.com/p/protobuf/
2、下載最新的protobuf,下載地址:https://code.google.com/p/protobuf/downloads/list
3、下載protobuf2.5.o版本,protobuf-2.5.0.tar.gz解壓並進行安裝。
解壓:tar xvf protobuf-2.5.0.tar.gz
安裝步驟:(1)./configure (2)make (3)make check (4)make install
注意:安裝成功后,將它的bin和lib目錄分別加入到PATH和LD_LIBRARY_PATH環境變量,以方便直接調用。
通常建議安裝到/usr/local目錄下,執行configure時,指定--prefix=/usr/local/protobuf即可
設置環境變量過程:編輯/etc/profile,在文件末尾添加:
export PATH=$PATH:/usr/local/protobuf/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib
2 簡單實例
2.1 編寫example.proto
2.2 生成pb.h 和pb.c
protoc -I=src_dir --cpp_out=dst_dir $src_dir/addressbook.proto
生成example.pb.h 和example.pb.cc
2.3 使用protobuf
2.3.1 編寫Write.cpp
注:
ptest::person 的定義在example.proto 生成的example.pb.h 文件中進行聲明,SerializeToOstream將對象序列化后寫入fstream流。
2.3.2 編譯write.cpp
注:
-I /usr/local/include –L /usr/local/lib 分別為編譯安裝protobuf對應文件位置(cygwin對應目錄位置),CentOs中編譯安裝protobuf后對應的文件位置 為:/usr/local/protobuf/include 和 /usr/local/protobuf/lib
2.3.3 編寫reader.cpp
reader.cpp文件如下:
注:
1、ParseFromIstream從fstream中讀取文件並反序列化。
2、編譯reader.cpp:
3 數據類型
3.1 消息定義
Protobuf消息定義:
消息由至少一個字段組合而成,類似於C語言中的結構。每個字段都有一定的格式。
字段格式:限定修飾符① | 數據類型② | 字段名稱③ | = | 字段編碼值④ | [字段默認值⑤]
限定修飾符包含 required\optional\repeated
1) required: 表示是一個必須字段,必須相對於發送方,在發送消息之前必須設置該字段的值,對於接收方,必須能夠識別該字段的意思。發送之前沒有設置required字段或者無法識別required字段都會引發編解碼異常,導致消息被丟棄。
2) optional:表示是一個可選字段,可選對於發送方,在發送消息時,可以有選擇性的設置或者不設置該字段的值。對於接收方,如果能夠識別可選字段就進行相應的處理,如果無法識別,則忽略該字段,消息中的其它字段正常處理。---因為optional字段的特性,很多接口在升級版本中都把后來添加的字段都統一的設置為optional字段,這樣老的版本無需升級程序也可以正常的與新的軟件進行通信,只不過新的字段無法識別而已,因為並不是每個節點都需要新的功能,因此可以做到按需升級和平滑過渡。
3) repeated:表示該字段可以包含0~N個元素。其特性和optional一樣,但是每一次可以包含多個值。可以看作是在傳遞一個數組的值。
3.2 數據類型
Protobuf定義了一套基本的數據類型,如下圖所示:
參考資料:
http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/
http://www.cnblogs.com/Anker/archive/2013/07/24/3209764.html





