考虑这样的 Cap'n'Proto 模式:
struct Document {
header @0 : Header;
records @1 :List(Record); // usually large number of records.
footer @2 :Footer;
}
struct Header { numberOfRecords : UInt32; /* some fields */ };
struct Footer { /* some fields */ };
struct Record {
type : UInt32;
desc : Text;
/* some more fields, relatively large in total */
}
现在我想序列化(即构建)一个文档实例并将其流式传输到远程目标。
由于文档通常非常大,我不想在发送之前将其完全构建在内存中。相反,我正在寻找一个通过网络直接发送结构的构建器。这样额外需要的内存缓冲区是恒定的(即 O(max(sizeof(Header), sizeof(Record), sizeof(Footer))))。
查看教程材料,我没有找到这样的构建器。MallocMessageBuilder
似乎首先在内存中创建所有内容(然后您调用它writeMessageToFd
)。
Cap'n'Proto API 是否支持这样的用例?
还是 Cap'n'Proto 更适合用于在发送前放入内存的消息?
在此示例中,可以省略 Document 结构,然后可以只发送一个 Header 消息、n 个 Record 消息和一个 Footer 的序列。由于 Cap'n'Proto 消息是自定界的,因此应该可以。但是你失去了你的文档根——也许有时这不是一个真正的选择。