im即时通讯开发:Protobuf数据传输格式

Posted wecloud1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了im即时通讯开发:Protobuf数据传输格式相关的知识,希望对你有一定的参考价值。

即时通讯应用(包括IM聊天应用、实时消息推送应用等)在选择数据传输格式的时候,相信没有真正实践过的人,都会犹豫该怎么选择。在即时通讯开发者同行的眼里,怎么选择其实是个极富争议话题。

 

Protobuf简介

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

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

protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而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的场合

需要和其它系统做消息交换的,对消息大小很敏感的。那么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,这是它的一大优点。

以上是关于im即时通讯开发:Protobuf数据传输格式的主要内容,如果未能解决你的问题,请参考以下文章

im即时通讯开发:如何选择数据传输格式

即时通讯技术文集(第11期):IM通信格式的选型及Protobuf专题 [共16篇]

浅析如何掌握IM即时通讯移动端开发时图片格式的特点

教你轻松开发一个Andriod版即时通讯

Flutter上线项目实战——即时通讯Protobuf

Flutter上线项目实战——即时通讯Protobuf