变更记录

序号 录入时间 录入人 备注
1 2017-01-06 Alfred Jiang -

方案名称

网络 - 使用 Protocol Buffers 数据格式进行网络数据传输

关键字

网络 \ Protocol Buffers \ 二进制格式 \ Protobuf

需求场景

  1. 用于分布式应用之间的数据通信或者异构环境下的数据交换

参考链接

  1. 《高性能 iOS 应用开发》
  2. 简书 - ProtocolBuffer for Objective-C 运行环境配置及使用(推荐)
  3. GitHub - google/protobuf
  4. Google Developers - Protocol Buffers
  5. 开源中国 - 使用 Protocol Buffers 代替 JSON 的五个原因

详细内容

Protocol Buffers(简称 Protobuf 或 PB)是由 Google 推出的一种数据交换格式,它独立于语言,独立于平台。Google 提供了三种语言的实现:java、c++ 和 python,每一种实现都包含了相应语言的编译器以及库文件。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。与传统的XML和JSON不同的是,它是一种二进制格式,免去了文本格式转换的各种困扰,并且转换效率非常快,由于它的跨平台、跨编程语言的特点,让它越来越普及,尤其是网络数据交换方面日趋成为一种主流。

关于 Protocol Buffers 在 Objective-C 工程中的配置使用可以参考 简书 - ProtocolBuffer for Objective-C 运行环境配置及使用

与 Protocol Buffers 类似的其他协议包括 Apache 的 Thrift 和 Apache 的 Avro 。通常情况下,Protobuf 被认为是最好的选择。

同 XML 相比,Protocol buffers 在序列化结构化数据方面有许多优点(google官方提出):

  • 更简单
  • 数据描述文件只需原来的1/10至1/3
  • 解析速度是原来的20倍至100倍
  • 减少了二义性
  • 生成了更容易在编程中使用的数据访问类

关于更多选择 Protocol Buffers 原因,可以参考 开源中国 - 使用 Protocol Buffers 代替 JSON 的五个原因

有些时候 JSON 比 Protocol Buffers 更适合,包括如下的场景:

  • 你需要或者想让数据对人是可读的
  • 来自于服务的数据是直接发送到web浏览器
  • 你的服务端应用程序是用javaScript编写的
  • 你不准备把数据模型绑定到模式上
  • 你没有带宽添加另外一个工具到你的军火库
  • 运行不同类型的网络服务的运营负担过大

效果图

(无)

备注

(无)