快速开始¶
bitproto 包含一个 代码生成器 和语言相关的库。
bitproto 的编译器会解析 bitproto 源文件并生成目标语言的代码,生成的代码中包含结构体的定义、编解码的 API 函数。
语言相关的库则提供了底层的序列化机制的实现。对于不同的语言,需要安装对应的序列化的库。
本文将介绍如何开始使用 bitproto 。
一个示例 bitproto¶
假设我们有一个 bitproto 文件叫做 pen.bitproto
,它包含以下内容:
proto pen
enum Color : uint3 {
COLOR_UNKNOWN = 0
COLOR_RED = 1
COLOR_BLUE = 2
COLOR_GREEN = 3
}
type Timestamp = int64
message Pen {
Color color = 1
Timestamp produced_at = 2
}
在上面的 bitproto 文件中:
proto
声明了这个 bitproto 的名字,这个语句对于每个 bitproto 文件都是必须的。Color
是一个指向uint3
的枚举,它占用了3
个比特,意味着它的值最大为7
。Timestamp
是一个用户自定义的类型,它是内置类型int64
的别名类型,类似于 C 语言中的typedef
关键字做的事情。Pen
是一个包含 2 个字段的消息。一个消息的字段等号的左边是它的类型和名字,右边是字段的标号。bitproto 会按照字段标号的顺序进行编码,因此一旦字段标号已经在使用,就不应该更改标号的大小了。
在 bitproto 中,我们可以仅仅从设计好的协议上获知数据在编码后占用多少字节。比如说,上面的消息 Pen
将会在编码后占用 3 + 64
个比特,也就是 9
个字节。
你可以在 github 上看到一个更大一些的 bitproto 的例子。
接下来,我们将以这个简单的 bitproto 文件来介绍不同语言中的用法。