protobuf 環境搭建和使用過程。

1.爲什麼要用protobuf?

       protobuf 是 google 推出的平臺無關、語言無關、可擴展的結構化數據序列化機制,爲不同平臺間的通訊數據解析,提供了簡單高效的方法。支持所有常見語言(C/C++、Java、Python、OC、C#、JS、Ruby、Go、PHP、Dart)。不同於json、xml這種可讀性強的數據格式,protobuf格式的數據是二進制格式無可讀性,需要進行解包後纔有可讀性。但是protobuf的優點是緊湊簡潔,佔用非常少的存儲空間,因此非常適合通訊傳輸。有了protobuf就不用擔心不同平臺或不同編程語言間,對於數據處理的差異。

2.怎麼用protobuf?

       protobuf顧名思義是protocol buffer(協議緩衝)的意思了,這個協議以 “.proto” 文件的形式定義,這個文件就是對協議的描述,也是作爲不同平臺、不同語言間的一個通訊媒介。假如是Java和C++之間使用protobuf協議,首先定義一個 “message.proto”的協議文件,接下來,java需要將這個message.proto轉換成java可以調用的接口,C++需要將message.proto轉換爲C++解壓調用的接口。這樣對於同一組數據,Java和C++就都能用各自的接口正確解析了。那通過什麼來轉換message.proto呢?目前windows、linux、macos平臺都有各自的轉換方法。下面以linux平臺爲例做介紹。

3.搭建protobuf環境

搭建平臺:Ubuntu18.04

1)安裝protobuf依賴的庫或工具

$ sudo apt-get install autoconf automake libtool curl make g++ unzip

2)下載protobuf源碼

        下載途徑1:通過鏈接下載壓縮包 : protobuf源碼及編譯好的工具,可根據自己的需要安裝所需語言的,也可所有語言全部安裝。

       下載途徑2: “git clone”一份源碼

    git clone https://github.com/protocolbuffers/protobuf.git
    cd protobuf
    git submodule update --init --recursive
    ./autogen.sh

3)安裝

     ./configure --prefix=/usr # ./configure 簡單粗暴直接放到 /usr 目錄防止系統找不到
     make # 過程比較慢
     make check
     sudo make install # 過程比較慢
     sudo ldconfig # refresh shared library cache.

4)驗證安裝是否成功

protoc --version

libprotoc 3.11.1

4.簡單的使用例子

1)創建一個 .proto 文件

syntax = "proto3";

package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

message Person {
    string name = 1;
    int32 id = 2;
    string email = 3;
}

message AddressBook {
    repeated Person people = 1;
    int32 id = 2;
}

2)編譯 .proto 文件

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/message.proto

        編譯完後,即可生成 "message.proto" 對應的 java 類文件,這樣就可以在java環境解析protobuf格式的數據了。

其他語言只需要替換 上面命令中的 “--java_out”即可,如下:

看到這裏,似乎發現並沒有支持C語言,這是因爲C語言還需要在此文章的基礎上安裝“protobuf-c”才能使用,詳情見下一章。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章