问题标签 [proto3]

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 投票
1 回答
5246 浏览

java - Java中的通用protobuf反序列化器

我正在尝试编写一个可用于反序列化/解析任何 protobuf 消息的通用 java 类。

以下是代码在完美世界中的外观:

但是,我无法为通用 protobuf 消息获取正确的解析器。实现这样一个泛型类的正确方法是什么?

0 投票
1 回答
1605 浏览

node.js - 表示嵌套 JSON 结构的 Proto3

我想知道如何在使用 Node.js 的 gRPC 实现中表示可变大小的 JSON 结构。我有一个 grpc 服务和一条消息,我想收到以下结构:

这是我的定义:

我读过你可以通过导入结构定义来做到这一点,但是当我这样做时,我得到一个文件未找到错误,因为它在当前目录中执行查找:

抛出:

0 投票
1 回答
1856 浏览

grpc - 在proto3中将对象作为数组传递给body

我想知道如何在不必指定键的情况下将数组作为消息体传递。我可以轻松做到:

那会回应:

我想将我的响应构造如下以匹配我的 REST API:

0 投票
1 回答
3436 浏览

protocol-buffers - 如何使用 protobuf 3 支持补丁休息请求

我们经常有一些用例,我们只想更新资源上的子集字段。因此,如果我们有资源Person

假设调用客户端只想更新该Age字段。通常如何设置端点来处理这个问题?

我相信这应该通过PATCH请求来完成,只有字段被设置为有效负载的一部分,即:

但是,这不适用于 proto3,因为据我所知,没有空字段,只有默认值。在默认值有效的许多情况下,这将不起作用。

0 投票
1 回答
2814 浏览

php - 在协议缓冲区php中解码消息

我从 C++ 中的另一台服务器和 php 中的另一台服务器获取 protobuf 消息(语法 2),我收到相同的 protobuf 消息(语法 3)。现在我的目的是解码该消息。

以下是文件:

.proto 文件:

这个 proto 文件生成 4 个类。这是类 ModuleStatistics:

}

index.php 文件:

这是我所有的协议缓冲区代码。

现在,当我尝试进入getModuleStatistics()函数时,它会抛出这个错误:PHP Catchable fatal error: Object of class ModuleStatistics could not be converted to string in /app/index.php on line 41

mergeFromString()没有给我任何错误,但它也没有重新运行任何东西。

我只收到 proto 文件的 4 条消息中的 1 条。但正如您所看到的,它是一个嵌套消息。我需要接收所有 4 条消息吗?然后也许将它们设置为彼此?

0 投票
1 回答
1897 浏览

node.js - 为什么 proto 缓冲区没有日期数据类型?

我正在使用节点,我很好奇为什么 proto 缓冲区没有日期数据类型?

我正在使用我定义了一个日期字段的 sequelizejs ORM:

MYSQL 数据库保存为 DateTime。

我应该使用哪种数据类型?有人在 GRPC 中使用日期时间吗?

0 投票
1 回答
3915 浏览

protocol-buffers - 可以将 proto3 可选字段更改为重复而不破坏电线兼容性吗?

假设我有一个 proto3 消息定义如下,用作 gRPC 请求(即使用 protobuf 的二进制编码):

我可以更改我的服务器(即消息的阅读器)以使用以下定义而不破坏现有客户端(即编写器)的线路兼容性吗?

proto2 语言指南中,我看到以下内容:

optional兼容repeated。给定重复字段的序列化数据作为输入,optional如果它是原始类型字段,则期望此字段的客户端将采用最后一个输入值,如果它是消息类型字段,则合并所有输入元素。

但是,proto3 文档不包含等效语句。我认为这可能与packedproto3中重复字段的编码使用有关。

0 投票
1 回答
11635 浏览

c# - 确定在 C# 中设置了哪个 'oneof' proto3 字段

对于以下协议缓冲区消息(proto3),我如何确定设置了哪种类型?似乎没有像生成的 C++ 版本那样的“has_reply”方法。

0 投票
1 回答
1525 浏览

java - 子消息的 Protobuf 延迟解码

我在我的项目中使用 proto 3 (java)。我有一些嵌入了较小消息的巨大 protobuf。有没有一种方法可以对我想查看的少数嵌套子消息进行部分解码。我目前遇到的问题是我需要将这个基于原型的巨大记录数据与另一条记录连接起来,但我的连接是基于非常小的子消息,所以我不想解码整个巨大的 protobuf 并且只能解码要加入的嵌套消息(字符串 id),然后只为加入的数据解码整个 protobuf。

我尝试使用[lazy=true]标记方法,但在生成的代码中看不到任何差异,我还尝试在有和没有惰性键工作的情况下对反序列化时间进行基准测试,但它似乎根本没有影响。此功能默认情况下是否适用于所有字段?或者这甚至可能吗?我确实看到 protobuf-github 中的 LazyFields.java 类和测试用例很少,所以我假设这个功能已经实现。

0 投票
2 回答
1873 浏览

grpc - 将元数据添加到 proto3 for Java 中的字段

Proto3 已被简化,不再支持requiredand字段(请参阅为什么在 Protocol Buffers 3 中删除了 required 和 optional)。还有一种方法可以将某个字段标记为吗?我调查过,并尝试过这样的事情:optionalrequiredFieldOptions

将其编译成 Java 代码后,当我检查编译后的 Java 代码时,我没有看到我在 proto.xml 中指定的字段与其元数据之间的任何链接。我在这里错过了什么吗?