快速开始

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 文件来介绍不同语言中的用法。

语言相关的引导