问题标签 [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 回答
2074 浏览

java - 运行时无法识别等于默认值的 Proto3 设置值

Proto3没有那么严格Proto2,而且没有requiredoroptional字段,也没有自定义default值。

给定以下定义...

这些字段中的任何一个都有默认值,毕竟现在没有规则规定您必须或不能在您.build()的对象之前提供什么。

因此,timeis 0priceis0.0sideis的默认值BID,如果您打印一个没有提供其中一个字段或提供默认值的实例,则运行时会将其视为在两种情况下都从未提供过,因此无法确定是否该值被手动设置为BID或被视为默认值。

例如,如果我们执行以下代码(它的 kotlin)

我们会有这个输出

至少这很烦人,因为当你使用标准.toString()或 json 打印机打印你的原型对象时,你会得到这个裁剪的输出......

但是,如果您的客户不一定关心默认值并希望所有字段都存在怎么办?

问题:有没有办法改变这种行为?至少我们如何确保如果设置了值,它会被显示?

也许有一种方法可以告诉protoc生成不同的代码(影响默认行为)......

0 投票
1 回答
575 浏览

ruby-on-rails - Ruby (proto3) 中的 gRPC 不允许使用 Nil 值

您好我正在使用 gRPC Ruby 插件与服务通信。原型定义包含(proto3):

但是,当我将 nil 分配给 id 时,它会引发错误 - 整数字段的预期数字。但是对于字符串, nil 值可以正常工作。如何允许整数/浮点字段的 nil 值?

0 投票
0 回答
736 浏览

c++ - 在 Windows 中为 C++ 构建 proto3 库

我已经从 proto2 protobuf 成功生成了 .cc 和 .h 文件。我还按照https://github.com/google/protobuf/tree/v2.6.1/vsprojects上的说明创建要链接的库。我在 Visual Studio 中创建了几个项目,并且能够为地址簿示例创建两个可执行文件。一切都像宣传的那样工作。

我现在正在研究 proto3,因为我可能需要对 Objective-c 的支持。下载预编译的二进制文件以生成 .cc 和 .h 文件很简单,但我无法弄清楚如何在 Windows 中复制上述步骤来创建一个库供我链接。还有其他人能够这样做吗?谢谢。

0 投票
1 回答
1035 浏览

c# - 通过网络接收 Protobuf3 消息

我将 Protobuf3 与 c# 用于我的客户端和 c++ 用于我的服务器,其中 .proto 是从相应的 protoc3 编译器生成的。我是使用 Google Protocol Buffers 的新手,我目前正试图弄清楚如何重新解析从我的客户端发送的服务器上接收到的字节,以将其转换回它的原始 google::protobuf::Message我的 C++ 服务器上的对象。

我的客户正在 c# 中发送 CodedOutputStream :

这似乎有效,现在发送的消息是一个简单的 Ping 消息,如下所示:

我的 BaseMessage 看起来像这样:

我的计划是希望从 BaseMessage 扩展我的所有消息,以便最终识别特定消息。一旦我弄清楚了解析和重新解析。

我在 C++ 服务器端收到的消息如下所示:\u0004\n\u0002\b

收到消息时,我试图通过解析接收到的字节来使用 CodedInputStream 对象重新解析。

这是我有点不确定将消息重新解析为特定消息所需的过程的地方。我相信如果我使用一个扩展所有消息的 BaseMessage,这将允许我识别特定消息,以便我知道要创建哪个消息。但是,在我知道它将是 Ping 消息的当前测试中, ParseFromCodedStream 似乎没有创建原始消息。我的推理来自我在 qDebug() 期间 pingMsg.base().size() 不是在我的 c# 客户端的发送阶段设置的正确值。

0 投票
1 回答
242 浏览

c# - 在 proto3 中将小数存储为字符串有什么缺点?

我在我的持久存储系统中使用 Google 的协议缓冲区库并希望保留货币值,但我不确定 photo (float/double) 提供的浮点类型是否足够好。将我的所有货币值存储为字符串(例如存储“0.10”而不是 0.1),然后在检索数据并需要进行算术运算时使用 Convert.ToDecimal 函数是否有任何缺点?

0 投票
2 回答
10634 浏览

protocol-buffers - gRPC 中的异常处理

我有一个用 Java 编写的服务器和一个用 PHP 编写的客户端。如果出现任何问题,客户端如何从服务器捕获异常?我在 gRPC 文档中找不到任何有关异常处理的信息。

谢谢!

0 投票
0 回答
238 浏览

android - proto3 嵌套消息创建错误

如果我尝试创建像上面这样的消息,它会给出错误 service_actions.proto:10:25: "com.sys.test.protocol.Action" 没有将 1010 声明为分机号。

任何关于如何创建此类消息的建议。

0 投票
1 回答
3030 浏览

grpc - 映射字段中的键不能是浮点/双精度、字节或​​消息类型

我们正计划将我们现有的服务迁移到 grpc 服务。所以需要将服务转换为原型定义的消息类型。在响应中,我们有以自定义对象为键的映射。

例如响应:

在官方文档中,他们提到,

其中 key_type 可以是任何整数或字符串类型(因此,除了浮点类型和字节之外的任何标量类型)。value_type 可以是任何类型

是否有任何替代方法可以在 proto3 中实现自定义对象键映射?

0 投票
1 回答
1037 浏览

python-3.5 - 如何使用 proto3 在 Python 中创建 gRPC 服务器?

根据这个http://www.grpc.io/docs/tutorials/basic/python.html#creating-the-server和这里的例子https://github.com/grpc/grpc/tree/v1.0.0/ examples/python/route_guide,当我生成我的_pb2.py文件时,应该创建几个名为*Stub并且*Servicer应该创建的类。但是,我生成的_pb2.py文件不包含这样的内容。

这就是我生成_pb2.py文件的方式:

proto3 有什么特别之处,意味着这些类没有生成吗?还是protoc我丢失的旗帜?我似乎无法弄清楚如何创建 gRPC 服务器。

0 投票
1 回答
4941 浏览

python - 测试 ProtoBuf 值是否使用默认值

我有一个 ProtoBuf 对象。我想检测特定字段何时使用默认值,而不是显式提供。

当我使用HasField它时返回True,但显然情况并非如此:

字符串表示似乎知道z使用默认值;我怎样才能自己检测到这一点?