Protocal Buffers的简短介绍
首先,什么是Protocol Buffers?文档中说:
“Protocol Buffers是一种以有效并可扩展的格式编码结构化数据的方式。”
Google开发了Protocol Buffers使用于内部的服务。 它是一种二进制格式允许你使用规范的语言定义一个模式,例如:
1message Person {
2 required int32 id = 1
3 required string name = 2
4 optional string email = 3
5}
你能在命名空间中封装他们或者用上面的方式在顶层声明他们。这个片段定义了Person数据类型的模式,有三个字段:id, name和email。除了命名字段,你能提供一个类型决定数据怎样编码和在线上发送,在上面我们看到有int32类型和string类型。还提供了关键字进行验证和结构化(required 和optional )。字段被编号,这有助于向后兼容,我将在以后详细的介绍。
Protocol Buffers规范已被多种语言实现:Java,C,Go等。如果你四处找找最现代的语言都有实现的方式。Ruby也不例外,有几个不同的Gems使用Protocol Buffers编码和解码数据。这就意味着,这个规范可以在不同语言实现的系统间传递数据。
例如,Ruby Gem安装被称为ruby-protoc的二进制可以和主Protocol Buffers库组合使用(在OSX中brew install protobuf),自动的产生桩类文件用于编码和解码数据。正在运行的二进制proto文件产生以下的Ruby类:
view sourceprint?
01#!/usr/bin/env ruby
02# Generated by the protocol buffer compiler. DO NOT EDIT!
03require 'protocol_buffers'
04
05# forward declarations
06class Person <::ProtocolBuffers::Messageend
07
08class Person <::ProtocolBuffers::Message
09 set_fully_qualified_name "Person"
10
11 required :int32, :id, 1
12 required :string, :name, 2
13 optional :string, :email, 3
14end
正如你所见,通过支持这种模式(Protocol Buffer格式),用来编码和解码信息,我们就能自动得到一个类(查看代码ProtocolBuffers::Message的基类在Gem中有更多细节的介绍)。我们已经看到了一些信息,那么就让我们再来仔细看看这些特征点,让我尝试说服你考虑Protocol Buffers——这里有5个理由。
1.8.7版很久了,可能当时一些语法现在的编译环境通不过了?为什么不用新的版本?而且没必要自己编译,linux大部分发行版应该都有ruby二进制包。不过我在windowsxp编译2.0,在archlinux编译2.0 2.1 2.2都很顺利。