美文网首页我爱编程
iOS 关于protocolbuffer的使用 2018年版

iOS 关于protocolbuffer的使用 2018年版

作者: moxacist | 来源:发表于2018-04-09 17:48 被阅读36次

新入公司,公司用的是protocolbuffer这种格式进行数据传递,之前也没接触过,所以陪了两天环境才弄好。

本文分为以下内容

       使用流程
       注意事项
       原理和优缺点

  • 使用流程,
  1. 后端给了几个.proto文件 可以用atom打开

    类似这种 后台给的文件
    后端给的文件
  1. 下载pb脚本,不同版本的脚本生成的代码不一样

github上最新的脚本是3.5.2,用homebrew默认安装则是这个最新的版本,如果用这个版本,则需要将github上的代码考入到本地工程,进行编译 如果有这种方法的话,可以参考这篇文章(他用的是3.1.0,一样的):https://www.cnblogs.com/tandaxia/p/6181534.html

我是选择从github上down的2.6.1版本(原因第4步说),在终端执行编译脚本命令
githud下载地址protobuf-2.6.1.tar.gz压缩文件,然后解压
在文件夹目录下依次执行命令
./configure
make
make check
sudo make install
如果上述操作没毛病的话,就会在/usr/local/bin文件夹下有个protoc的可执行文件(这个不用执行,不用管它)

  1. 下载脚本依赖库 ,将proto文件通过脚本变成oc的pb类

下载脚本依赖库:https://github.com/alexeyxo/protobuf-objc
cd到该依赖库文件夹,然后./scripts/build.sh
然后如果没意外的话usr/local/bin 下就会有个protoc-gen-objc可执行文件

cd到刚才后端给的文件夹目录下 执行命令:

protoc --plugin=/usr/local/bin/protoc-gen-objc 你的文件.proto --objc_out="./"
会生成.h.m文件

  1. 将pb类拖入工程,然后通过第三方代码进行读取和封装
    这里很关键,一开始我用的3.5.1脚本生成的hm文件要从github上拖代码下来进行中间转发成oc框架可读取的类,由于我太懒,就没这么做,
    因为对于2.6.1的脚本的版本生成hm文件,git上有个pod库可以转成oc框架可读取的类,所以我用的2.6.1脚本,然后按照第三部生成的代码拖入工程

5.将生成的data数据发送给后端

   CheckVersionReqBuilder *builder= [CheckVersionReq builder];
   builder.channel = channel;
   builder.version = version;
   NSData *data = [builder build].data;
 //设置request
    NSString *url = [NSString stringWithFormat:@"%@%@",API_BASE_URL,requestTask.path];
    APLog(@"url == %@\n参数 == %@\n",url,requestTask.requestPb);
    
    [self.request setHTTPBody:data];
    [self.request setURL:[NSURL URLWithString:url]];
  
   [[self.sessionManager dataTaskWithRequest:self.request
                            completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                         //result
                            }]resume] ;


  • 注意事项

因为这个protoc文件是后端给的,里面定义了模型,也就是说每次请求的模型有变动的话,除了改代码之外还得更新文件 重新生成pb.h .m,别想着自己在生成的类里增加个字段

网络请求和返回的模型都是生成好的了,可以直接用,当然如果想用去模型化的设计方案就比较头痛了


  • 原理和优缺点

原理我也只是看过大致懂,看的是这篇文章:https://blog.csdn.net/carson_ho/article/details/70568606

优缺点,结合本人使用情况说下:
优点:

  • 由于编码方法影响的传输体积比较小
  • 序列化和反序列速度快很多
  • 进行了简单的编码,所以加密性好一点点,真的只是一点点
  • 跨平台? 我觉得是没什么用的,不认为是优点

缺点:

  • 比起主流的json/xml 需要学习成本,特别是配使用环境那一段
  • 维护成本,每次更新参数需要重新编译文件
  • 让人误以为的加密好,我在开发中发现账号密码传过去的data 强转成string之后会显示数字密码,很尴尬,所以还是用了个aes加密
  • 不可直观的读取出传输前的数据

以上是文章的所有内容,如果有帮到您的地方,希望点个赞,谢谢

相关文章

网友评论

    本文标题:iOS 关于protocolbuffer的使用 2018年版

    本文链接:https://www.haomeiwen.com/subject/wnyihftx.html