问题标签 [protocol-buffers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
318 浏览

java - 使用 GPB,我如何让我的包装类停止接受不适合它们的二进制消息?

我正在使用Google Protocol Buffers来序列化我的一些业务对象(在 Java 应用程序中)。按照教程中的建议,我将消息构建器包装在我自己的类中,该类实现 getter 和 setter 方法来访问消息的属性。optional此外,我再次按照他们的建议声明了所有消息字段。

现在,我可以为任何包装类提供任何编码消息,它们将始终解析并接受它们。这会导致包装器对象表示它们实际上不包含的消息类型,并且会发生很多虚假事件。

将消息的二进制内容加载到包装器类中时,如果传递了错误的类型,如何使其抛出错误?

我目前正在考虑的解决方案是让所有消息都扩展一个带有必需类型字段(可能还有一个版本字段)的基本消息。如果这些字段丢失,这将使生成的构建器类抛出异常,如果它们在那里,我可以签入我自己的代码。但是,我还没有完成评估这对我的代码有什么影响,我不确定这会不会很容易。

0 投票
2 回答
6033 浏览

c# - protobuf-net 如何实现可观的性能?

我想了解为什么Marc Gravell开发的.NET 协议缓冲区解决方案如此之快。

我可以理解最初的 Google 解决方案是如何实现其性能的:它为对象序列化预先生成优化代码;我已经手工编写了一些序列化,并且知道如果避免反射,可以通过这种方式编写非常快的代码。但是 Marc 的库是一个运行时解决方案,它使用属性并且不生成任何生成的代码。那么它是怎样工作的 ?

0 投票
4 回答
8674 浏览

android - Android 和协议缓冲区

我正在编写一个既可以存储数据又可以使用协议缓冲区与服务器通信的 Android 应用程序。但是,使用 LITE 标志编译的协议缓冲区的库存实现(在 JAR 库和生成的 .java 文件中)有大约 30 KB 的开销,而程序本身只有大约 30 KB。换句话说,协议缓冲区使程序大小翻了一番。

在网上搜索,我找到了一个Android 特定实现的参考。不幸的是,似乎没有它的文档,并且从标准 .proto 文件生成的代码与它不兼容。有人用过吗?如何从 .proto 文件为此实现生成代码?还有其他轻量级的替代品吗?

0 投票
4 回答
925 浏览

go - 与协议缓冲区集成?

快速浏览文档后,我立即开始考虑与现有语言和应用程序的集成,并想知道是否会为 Protocol Buffers 提供支持?

0 投票
3 回答
52107 浏览

c++ - 如何在 C++ 中使用 Google 的协议缓冲区添加重复字段?

我有以下协议缓冲区。请注意,StockStatic 是一个重复字段。

我在遍历向量时填写 StockStatic 字段。

但是只有当 StockStatic 是可选字段而不是重复字段时,上面的代码才是正确的。我的问题是我缺少哪一行代码以使其成为重复字段?

0 投票
1 回答
1256 浏览

gwt - 协议缓冲区 + GWT 的任何示例?

你知道任何一起使用 Google Protocol Buffers 和 GWT 的例子吗?

0 投票
2 回答
1743 浏览

java - 使用协议缓冲区作为通用数据对象?

我们正在引入协议缓冲区作为一些后端 RPC 服务的新传输。因为在不同形式的相似对象之间手动穿梭数据存在阻力,我可以预见协议缓冲区实例被向上传递到堆栈比仅仅传递到 RPC 服务器接口高一点。

这是我应该尽量避免的事情吗?将协议缓冲区对象视为普通数据持有者是否安全,并且可以快速有效地将其转换为二进制文件和从二进制文件中取出?

我认为它是生成数据对象的好方法的另一个原因是必需/可选字段的概念和自动生成的构建器界面。

0 投票
2 回答
1409 浏览

c++ - 支持部分序列化的 C++ 序列化库?

是否有任何支持部分序列化的现有 C++ 序列化库?

通过“部分序列化”,我的意思是我可能想要保存 3 个特定成员的值,然后能够将该保存的副本应用到不同的实例。我只会更新这 3 个成员,而让其他成员保持原样。

这对于通过网络同步数据很有用。假设我在客户端和服务器上有一些对象,当服务器上的成员发生更改时,我想向客户端发送一条消息,其中包含该成员和该成员的更新值。我不想通过网络发送整个对象的副本。

boost::serialization乍一看好像只支持all or nothing。

编辑:在最初写这篇文章 3 年后,我回顾它并对自己说,'wut?boost::serialization 允许您定义要保存或不保存的成员,因此它支持“部分序列化”,正如我所描述的那样。此外,由于 C++ 缺少反射序列化库,因此需要您明确指定要保存的每个成员,除非它们带有某种外部工具来解析源文件或具有用于生成 C++ 代码的单独输入文件格式(例如协议缓冲区做什么)。我想当我写这篇文章时,我一定是在概念上感到困惑。

0 投票
5 回答
18209 浏览

python - 为什么我在使用 Google 协议缓冲区时看到“无法导入名称描述符_pb2”错误?

当使用从我们的 protobuf 类生成的 Python 代码时,我们得到这个错误:

等效的 C++ 生成代码工作得很好,所以看起来我们的实际原型定义没有问题。

当我尝试导入我们的类时会发生此错误,如下所示:

附加系统路径是否正确?

我检查了protobuf\python\google\protobuf目录descriptor_pb2.py但只找到descriptor.py了 - 我们使用的是最新版本,所以我假设我们没有丢失任何文件。

有谁知道解决方案是什么?

0 投票
1 回答
1717 浏览

django - 使用像 Protocol Buffers 这样的 RPC 作为 Django 的后端,而不是 MySQL 或 SQLite

app-engine-patch项目背后的聪明人基本上启用了 Django 的所有有趣的东西,包括管理员,但没有使用 Django 的 ORM。

从他们的网站:

最重要的变化是你必须使用 Google 的Model类,因为开发模型与 Django 相差太大(至少与 Django 当前的 API 不同)。

这本质上是我想做的,但是通过 RPC 使用Google 的协议缓冲区作为数据传输层。

在他们的 addressbook.proto 示例中使用 Person 消息,我基本上想这样做: