protobuf在iOS中的运用
protocolbuffer(以下简称protobuf)是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、oc、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml和json 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。
我们重点介绍protobuf在iOS中的运用,官方文档
protobuf使用步骤
- 定义.proto文件
- 配置protobuf环境
- 映射相应语言的文件
- 导入第三方库protobuf
.proto文件的定义
该文件主要是用来作为你传递数据的数据结构的文档,然后通过终端命令生成我们相应语言的model类,导入项目中使用。
.proto的定义语法有官方文档自己学习,在此不过多介绍,在此一定要注意的是,一定要使用proto3来定义,proto2已经在很多第三方库中被淘汰使用(以前用的都是proto2,Proto3出来并不了解,报错信息一度让我怀疑人生)。定义文件类似下图所示:
配置protobuf环境
使用homebrew进行配置(如果没安装,自己谷歌安装)
- brew install automake
- brew install libtool
- brew install protobuf
- ln -s /usr/local/Cellar/protobuf/(上步中安装protobuf的版本号)/bin/protoc /usr/local/bin
- git clone https://github.com/alexeyxo/protobuf-objc.git(oc版本)或者
git clone https://github.com/alexeyxo/protobuf-swift.git(swift版本) - cd protobuf-objc
- ./autogen.sh
- ./configure CXXFLAGS=-I/usr/local/include LDFLAGS=-L/usr/local/lib
- make install
映射相应语言的文件
- cd 到.proto文件的路劲中
- protoc --plugin=/usr/local/bin/protoc-gen-objc test.proto --objc_out=.
此为生成oc类的命令,其中test.proto是自己生成的proto文件的名字。相应swift类的命令为:
protoc --plugin=/usr/local/bin/protoc-gen-swift test.proto --swift_out=. - 将生成的文件导入项目中
导入第三方库protobuf
这里建议使用pod管理:pod 'Protobuf'
Protobuf库的使用
一般就是将Data类型的数据映射成model和将model生成data类型数据两个方法,他们分别是
使用GPBMessage中的俩个方法
+ (instancetype)parseFromData:(NSData *)data error:(NSError **)errorPtr {
return [self parseFromData:data extensionRegistry:nil error:errorPtr];
}
- (nullable NSData *)data;
小结
使用protobuf传输还是存在安全问题和数据比较大时的耗能问题,于是我们想到了,在直播领域应用很普遍的RTMP协议。下篇文章详细讲解,使用分包思想拆解数据包进行数据传输。
最后
代码具体实现地址
代码中具体实现了几个棋类游戏,包括在线对战,人机对战(算法不错哦),蓝牙对战。
代码编写不易,喜欢的请点赞,谢谢!