最近在做出行類的項目,需要socket上傳分發 location 數據,之前都是json數據,現在要改成protobuf,頭一次聽說這個東東,下面是搜到的一些內容,然後寫了一個demo,用Python實現了一個簡單的socket 服務端,簡單實現發送分發protobuf數據。閒話少說,讓我們先了解一下protobuf是什麼
- protocol buffers 是一種語言無關、平臺無關、可擴展的序列化結構數據的方法,它可用於(數據)通信協議、數據存儲等。
- Protocol Buffers 是一種靈活,高效,自動化機制的結構數據序列化方法
環境安裝
使用brew安裝,沒有安裝brew可以自行百度安裝
1.安裝依賴工具
$ brew install automake
$ brew install libtool
2.安裝protobuf
$ brew install protobuf
3.克隆 protobuf-objc
$ git clone https://github.com/alexeyxo/protobuf-objc.git
4.運行腳本 (切換到protobuf-objc路徑)
$ ./scripts/build.sh
創建編輯 proto 文件
syntax = 'proto3';
message Location {
string accessToken = 1;
string cdType = 2;
string clientId = 3;
string connectUser = 4;
string direction = 5;
double latitude = 6;
double longitude = 7;
string orderId = 8;
float speed = 9;
int64 timestamp = 10;
float travelMile = 11;
string type = 12;
}
轉化objc、py文件
使用protoc工具生成 Objective-C 和Python文件
$ protoc --proto_path=A --objc_out=B Location.proto
$ protoc --proto_path=A --python_out=B Location.proto
其中--proto_path=後跟A是需要處理的proto文件所在的文件夾,--objc_out=指明生成的是Objective-C代碼以及目標文件存放路徑,B是目標文件存放路徑,Location.proto是需要處理的文件。
--python_out=生成Python文件
至此,我們的準備工作就做完了,新建一個項目 姑且命名 protobufDemo,cocoapods集成protobuf,將生成的objc文件拖入到項目中因爲這兩個文件不支持ARC,設置編譯參數 TARGETS >> Build Phases >> Compile Sources >> Location.pbobjc.m 爲 -fno-objc-arc 。
簡單應用
#import "Location.pbobjc.h"
......
- (void)simple {
Location *location = [[Location alloc]init];
location.accessToken = @"base qw";
location.orderId = @"orderid-123";
location.clientId = @"clientid-123";
location.latitude = 30.199544680748;
location.longitude = 120.27409366925;
location.speed = 0.25;
NSData *data = [location data];
Location *l = [Location parseFromData:data error:nil];
NSLog(@"%.11f", l.longitude);
}
socket應用
建立socket連接,向服務端發送數據
[self.tcpSocket writeData:data withTimeout:-1 tag:110];
處理接收的數據
Location *location = [Location parseFromData:data error:nil];
參考:
iOS下 安裝Protobuf(ProtocolBuffers)的詳細步驟