没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
文档名称:ProtoBuf 开发者指南 - 非官方不完整版
ProtoBuf 开发指南 - 非官方不完整版
这个文档用于指导开发的,属于非官方发布版本进行选译的,并不完整。供参
考使用。
1 概览
欢迎来到 的开发者指南文档,一种语言无关、平台无关、扩
展性好的用于通信协议、数据存储的结构化数据串行化方法。
本文档面向希望使用 的 、或 开发者。这个
概览介绍了 ,并告诉你如何开始,你随后可以跟随编程指导
深入
了解 编码方式
。
参考文档
!
"同样也是提供了这三种编程语言的版本,不够协议语言
和样式
指导都
是编写 文件。
1.1 什么是
protocol buer
# 是用于结构化数据串行化的灵活、高效、自动的方法,有如
$%&,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用
代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序
的情况下更新数据结构。
1.2 他们如何工作
你首先需要在一个 文件中定义你需要做串行化的数据结构信息。每个
# 信息是一小段逻辑记录,包含一系列的键值对。这里有个非常
简单的 文件定义了个人信息
'
()*+
(,-)-+
),+
第 1 页 共 22 页
文档名称:ProtoBuf 开发者指南 - 非官方不完整版
.'
%/# &0)1+
2/%0)*+
3/45)-+
6
7'
()*+
.)-8!)2/%09+
6
7):+
6
有如你所见,消息格式很简单,每个消息类型拥有一个或多个特定的数字字段,
每个字段拥有一个名字和一个值类型。值类型可以是数字整数或浮点、布 尔
型、字符串、原始字节或者其他 # 类型,还允许数据结构的分级。
你可以指定可选字段,必选字段和重复字段。你可以在
找到更
多关于如何编写 文件的信息。
一旦你定义了自己的报文格式,你就可以运行 # 编
译器,将你的 文件编译成特定语言的类。这些类提供了简单的方法访问
每个字段像是 (和 ;(,像是访问类的方法一样将结构串行
化或反串行化。例如你可以选择 语言,运行编译如上的协议文件生成类叫
做 。随后你就可以在应用中使用这个类来串行化的读取报文信息。你
可以这么写代码
+
;<=<+
;*-,:+
;<>?@<+
!<A<BC+
DE./F+
然后,你可以读取报文中的数据
!<A<BC+
+
G F+
HH<7<HHHH+
HH<0I<HHHH+
第 2 页 共 22 页
文档名称:ProtoBuf 开发者指南 - 非官方不完整版
你可以在不影响向后兼容的情况下随意给数据结构增加字段,旧有的数据会忽
略新的字段。所以如果使用 # 作为通信协议,你可以无须担心破
坏现有代码的情况下扩展协议。
你可以在 参考
!
"中找到完整的参考,而关于 # 的报文格式编码则可以
在
中找到。
1.3 为什么不用
XML?
# 拥有多项比 $%& 更高级的串行化结构数据的特性,
#:
更简单
小 ,I*1 倍
快 -1I*11 倍
更少的歧义
可以方便的生成数据存取类
例如,让我们看看如何在 $%& 中建模 的 和 字段
HJ
HJ=HJ
HJ>?@HJ
HJ
对应的 # 报文则如下
K# 的文本表示
K这不是正常时使用的二进制数据
'
<=<
<>?@<
6
当这个报文编码到 # 的二进制格式
时
上面的文本仅用于调试和编辑,它只需要 -L 字节和 *11I-11 的解析时间。
而 $%& 的版本需要 MN 字节除去空白和 O111I*1111 的解析时间。
当然,操作 # 也很简单
第 3 页 共 22 页
文档名称:ProtoBuf 开发者指南 - 非官方不完整版
HH<7<HHHH+
HH<0I<HHHH+
而 $%& 的你需要
HH<7<
HH0#.7<<IJ1I
J.@
HH+
HH<0I<
HH0#.7<<IJ1I
J.@
HH+
当然,# 并不是在任何时候都比 $%& 更合适,例如
# 无法对一个基于标记文本的文档建模,因为 你根本没法方便的
在文本中插入结构。另外,$%& 是便于人类阅读和编辑的,而
# 则不是。还有 $%& 是自解释的,而 # 仅在你拥
有报文格式定义的 文件时才有意义。
1.4 听起来像是为我的解决方案,如何开始 ?
下载包!",包含了
、、的 # 编译器,用于生成你需要的 / 类。
构建和安装你的编译器,跟随 40=%0 的指令就可以做到。
一旦你安装好了,就可以跟着编程指导
来选
择语言I随后就是使用 # 创建一个简单的应用了。
1.5 一点历史
# 最初是在 P 开发的,用以解决索引服务器的请求、响应
协议。在使用 # 之前,有一种格式用以处理请求和响应数据的编
码和解码,并且支持多种版本的协议。而这最终导致了丑陋的代码,有如
!)),'
6!J:'
!))O'
6
第 4 页 共 22 页
文档名称:ProtoBuf 开发者指南 - 非官方不完整版
6
通信协议因此变得越来越复杂,因为开发者必须确保,发出请求的人和接受请
求的人必须同时兼容,并且在一方开始使用新协议时,另外一方也要可以接受。
# 设计用于解决这一类问题:
很方便引入新字段,而中间服务器可以忽略这些字段,直接传递
过去而无需理解所有的字段。
格式可以自描述,并且可以在多种语言中使用、 等
然而用户仍然需要手写解析代码。
随着系统的演化,他需要一些其他的功能:
自动生成编码和解码代码,而无需自己编写解析器。
除了用于简短的 44请求,人们使用
# 来做数据存储格式例如 #.。
4 服务器接口可以作为 文件来描述,而通过
# 的编译器生成存根类供用户实现服务器接
口。
# 现在已经是 P 的混合语言数据标准了,现在已经正在使
用的有超过 :LB*M- 种报文格式定义和超过 *-B*L, 个 文件。他们用于
4 系统和持续数据存储系统。
2 语言指导
本指导描述了如何使用 # 语言来定义结构化数据类型,包括
文件的语法和如何生成存取类。
这是一份指导手册,一步步的例子使用文档中的多种功能,查看入门指导
选择
你的语言。
2.1 定义一个消息类型
?"Q
2.2 值类型
第 5 页 共 22 页
剩余21页未读,继续阅读
资源评论
vasonyang
- 粉丝: 6
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功