首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Protocol Buffers开发者指南(1)——概论

2012-07-15 
Protocol Buffers开发者指南(一)——概论Protocol Buffers是在通信协议、数据存储等方面,用来序列化结构化数

Protocol Buffers开发者指南(一)——概论
        Protocol Buffers是在通信协议、数据存储等方面,用来序列化结构化数据,一种语言无关、平台无关、可扩展的解决方案。

        这篇概论主要是介绍Protocol Buffers,并且告诉你,如果你要开始使用Protocol Buffers,需要做哪些事情。

1. 什么是Protocol Buffers
        Protocol Buffers是一种易扩展、高效的、自动化的序列化结构化的数据的机制,比起XML来,它更小、更快、更简单。一旦你明确了你想要你的数据用什么结构,你就可以很容易用某种生成的源代码来读写你的结构化数据,可以是各种各样的数据流,也可以用在各种各样的语言中。你甚至可以更新你的数据结构,而不用重新部署你用“老”的数据格式编译的程序。

2. Protocol Buffers是怎样工作的?
        你可以通过在.proto文件里面用Protocol Buffers消息类型进行定义,来让你准备序列化的信息如何结构化。每一个Protocol Buffers消息是信息的一条小的逻辑记录,里面包含一系列名称-值对。下面我们来看一个非常简单的.proto文件,这个文件定义了一个人的信息。



        你可以在你的消息格式里面添加新的域,而不用考虑向后兼容性,老的二进制流在解析的时候可以简单的忽略掉新增的域。因此如果你使用Protocol Buffers作为你数据格式的通信协议时,你可以扩展你的协议,而不用担心破坏现有的代码。

3. 为什么不使用XML?
        在序列化结构化数据方面,Protocol Buffers比起XML来,有很多优点:

Protocol Buffers比XML更简单。 Protocol Buffers比XML小3~10倍。 Protocol Buffers比XML快20~100倍。 Protocol Buffers比XML更明确。 在生成数据访问类方面,Protocol Buffers比XML更容易编程实现。

        我们以构建一个person模型为例子,person里面包含一个name和一个email。如果采用XML方式,我们需要如下处理:



        反而使用XML你需要如下处理:

if (version == 3) {  ...} else if (version > 4) {  if (version == 5) {    ...  }  ...}


        很明显,格式化的协议会让部署新版本协议的时候更加复杂,因为开发人员必须在按下一个开关开始使用新的协议之前,确认所有服务器(包括请求发起服务器和真正处理请求的服务器)能够理解新的协议。

        Protocol Buffers是被设计用来解决以下两个方面的许多问题:

数据格式里面能够很容易引入一个新的域,中间服务器不需要观察数据格式就能够很简单的去解析它,并且不需要知道所有域就能够让数据通过。 数据格式里面有更多的自我描述,能够被各种各样的语言(C++、Java等)处理。

        然而,用户仍旧需要亲自编写他们自己的解析代码。

        随着Protocol Buffers的发展,它又有了一些其他的特征和用法:

自动生成序列化和反序列化代码,从而避免手工编写解析代码。 另外因为能够被用来进行短暂的远程过程调用(Remote Procedure Call,RPC)式的请求,所以人们开始使用Protocol Buffers作为一个便利的自我描述的数据格式,用来进行数据的持久化存储(例如,在Bigtable里面)。 服务器的RPC接口可以开始作为协议文件的一部分来进行声明了,协议编译器可以自动生成stub类,用户可以在服务器端用真实的接口实现来进行重载。

        Protocol Buffers现在是Google的数据沟通语言,在写这篇文章的时候,在Google的代码里面大概用12183个.proto文件定义了大概48162种不同的消息类型。他们被用于RPC系统和在各种各样的存储系统里面持久化存储数据这两个方面。 1 楼 argan 2009-08-20   下面的呢?没了? 2 楼 darrendu 2010-10-14   这个只是序列化,远程调用呢?怎么没人写demo啊

热点排行