protobuf,json,xml,binary,Thrift之间的对比

前言


即时通讯应用(包括IM聊天应用、实时消息推送应用等)在选择数据传输格式的时候,相信没有真正实践过的人,都会犹豫该怎么选择。在即时通讯开发者同行的眼里,怎么选择其实是个极富争议话题。不过本文作者强烈建议将Protobuf作为您的即时通讯应用的首选通讯协议格式,理由请见下文。

据说,手机QQ的数据传输协议已在使用Protobuf了,而从官方流出资料来看微信早就在使用Protobuf(而且为了尽可能地压缩流量,甚至对Protobuf进行了极致优化)。

论坛里有另一个篇关于即时通讯数据传输格式选择的文章,可以参考一下:《如何选择即时通讯应用的数据传输格式》。

更多资料


Protobuf官方主页:https://github.com/52im/protobuf
移动端IM开发问题:http://www.52im.net/thread-133-1-1.html
即时通讯综合性资料:http://www.52im.net/forum.php?mod=collection&action=view&ctid=10
即时通讯安全性资料:http://www.52im.net/forum.php?mod=collection&action=view&ctid=6
实时音视频开发资料:http://www.52im.net/forum.php?mod=collection&action=view&ctid=4
即时通讯的架构设计:http://www.52im.net/forum.php?mod=collection&action=view&ctid=7
更多资料精选请查看:http://www.52im.net/forum.php?mod=collection&op=all

Protobuf简介


一条消息数据,用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二进制序列化的10分之一,总体看来ProtoBuf的优势还是很明显的。

protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,详情访问protobuf的google官方网站。

protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。

详情请参见Protobuf官方主页:https://github.com/52im/protobuf

Protobuf简单总结

 

  • 灵活、高效:
    灵活(方便接口更新)、高效(效率经过google的优化,传输效率比普通的XML等高很多);
  • 易于使用:
    开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。
  • 语言支持
    原生支持c++,java,python等。

 

Protobuf支持的开发语言


截止目前,Protobuf官方工程主页上显示的已支持的开发语言多达10种,分别有:C++、Java、Python、Objective-C、C#、JavaNano、JavaScript、Ruby、Go、PHP,基本上主流的语言都已支持。

强列建议将Protobuf作为你的即时通讯应用数据传输格式_QQ20160502-0.png

详情请参见Protobuf的官方工程主页:https://github.com/52im/protobuf

个人总结的适用Protobuf的场合

 

  • 需要和其它系统做消息交换的,对消息大小很敏感的。那么protobuf适合了,它语言无关,消息空间相对xml和json等节省很多。
  • 小数据的场合。如果你是大数据,用它并不适合。
  • 项目语言是c++,java,python的,因为它们可以使用google的源生类库,序列化和反序列化的效率非常高。其它的语言需要第三方或者自己写,序列化和反序列化的效率不保证。


总体而言,protobuf还是非常好用的,被很多开源系统用于数据通信的工具,在google也是核心的基础库。

写在最后


此外,Facebook的thrift据说也很有特色,2007年由Facebook开发,之后在2008年加到Apache计划中。是一个跨语言的轻量级RPC消息和数据交换框架,Thrift能生成的语言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml,这是它的一大优点。

关于Thrift工程,详见官方主页:http://thrift.apache.org/

 

参考:http://blog.sina.com.cn/s/blog_406127500102uy6e.html

原始:http://www.52im.net/thread-277-1-1.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值