gpt4 book ai didi

protocol-buffers - Google protobuf和大型二进制Blob

转载 作者:行者123 更新时间:2023-12-04 07:25:18 24 4
gpt4 key购买 nike

我正在构建用于远程控制连接到另一台PC的 radio 硬件的软件。

我计划使用ZeroMQ进行传输,并使用类似RPC的请求-应答,并在其顶部使用不同的消息来表示操作。

尽管我的大多数消息只是一些控制和状态信息,但应该有一个选项来设置要发送的数据块或请求要接收的数据块。这些数据Blob通常在5-10MB范围内,但也可以使用最大为100MB的较大Blob。

对于消息格式,我发现google Protocol Buffer 非常吸引人,因为我可以在传输链接上定义一种消息类型,该消息类型具有用于所有命令和响应的可选元素。但是,protobuf常见问题解答指出,这样的大消息会对性能产生负面影响。

所以问题是,实际情况有多严重?会有什么负面影响?我并不是真的希望整个通信都基于protobuf,只是为了发现它不起作用。

最佳答案

我没有时间为您执行此操作,但是我将浏览Protobuf source code。更好的是,继续使用大的bytes字段编写代码,从源代码构建protobuf,然后在调试器中逐步检查它,以查看发送和接收大的blob时会发生什么。

根据经验,我可以告诉您,大repeated Message字段的效率不高,除非它们具有[packed=true]属性,但它仅适用于原始类型。

我的直觉是,较大的bytes字段将很有效,但这完全没有根据。

您也可以绕过Protobuf来获取较大的 Blob :

message BlobInfo {
required fixed64 size;
...
}

message MainFormat {
...
optional BlobInfo blob;
}

那么您的解析代码如下所示:
...
if (message.has_blob()) {
uint64_t size = msg.blob()->size();
zmqsock.recv(blob_buffer, size);
}

关于protocol-buffers - Google protobuf和大型二进制Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com