一、Protobuf 簡介java
Protocol Buffer是google 的一種數據交換的格式,已經在Github開源,目前最新版本是3.1.0。它獨立於語言,獨立於平臺。google 提供了多種語言的實現:Java、C#、C++、Go 和 Python,Objective-C,每一種實現都包含了相應語言的編譯器以及庫文件。因爲它是一種二進制的格式,比使用 XML 進行數據交換快許多。能夠把它用於分佈式應用之間的數據通訊或者異構環境下的數據交換。做爲一種效率和兼容性都很優秀的二進制數據傳輸格式,能夠用於諸如網絡傳輸、配置文件、數據存儲等諸多領域。python
二、Protobuf的轉換git
就是將咱們編寫好的XXX.proto文件轉成Objective C文件,也就是XXX.h和XXX.m文件,轉換的工具是使用protoc這種二進制文件來生成的github
若是沒有裝autoconf automake libtool須要先裝這幾個,這裏使用brew來安裝,在shell執行 brew install autoconf automake libtool便可,若是沒有brew請自行先安裝brew。
下載面向Objective-C的protobuf庫,地址爲(https://github.com/google/protobuf/releases),要下載對應objective-c的版本、解壓。objective-c
cd到下載的目錄,依次執行:shell
再執行
- objectivec/DevTools/full_mac_build.sh網絡
執行完後會看到src目錄下生成了protoc二進制文件socket
編譯修改好的svmp.proto文件分佈式
在src目錄(protoc所在目錄)執行工具
protoc --proto_path=... --objc_out=... XXX.proto
其中proto_path是咱們建立的proto文件所在目錄,objc_out爲Objective-C文件輸出路徑,XXX.proto是咱們建立的proto文件,能夠一次轉換多個proto文件,加在XXX.proto後面便可。
舉例:咱們在src目錄下新建兩個文件夾,gen和protocols文件夾,gen爲輸出目錄,protocols用於存放proto文件,將建立的svmp.proto放在protocols文件夾下,執行命令
protoc --proto_path=protocols --objc_out=gen protocols/svmp.proto
而後在gen文件夾下就會生成svmp.pbobjc.h和svmp.pbobjc.m文件。
三、protobuf的集成
將生成的Ojective-C文件(上面例子的svmp.pbobjc.h和svmp.pbobjc.m)放到項目中,若是項目使用了ARC,要將.m(svmp.pbobjc.m)的Complier Flags設爲-fno-objc-arc。(protobuf基於性能緣由沒有使用ARC)
加入protobuf庫
Podfile內 加入pod 'Protobuf', '~> 3.2.0',pod install安裝該庫
就能夠使用svmp.pbobjc.h來解析和建立數據了
以建立屏幕信息Screeninfo這個請求爲例
Request * res = [[Request alloc]init];
res.type = Request_RequestType_Screeninfo;
NSData* data = [request data];
[self.socket send:data];
解析數據
Response * resp = [Response parseFromData:message error:nil];
Response_ResponseType rt = resp.type;