Protocol buffers 通过protobuf传递对象数组

我一直遇到相同的错误:keyorbj.hasOwnProperty不是函数 要传递的数据 { "stocks": [{ "quantity":3, "substore_uuid": "2343423443423" }] } 这是我的原始声明 service Procurement { rpc distributeUpsert (ProcurementStockDistributionUpsertReq) returns (ProcurementStockDistri

Protocol buffers 你能在proto3中表示一个可以有任意字段的对象吗?

考虑以下对象的json表示 { "format": "0.0.1", "has_impl": true, "mtv_1b": 1, "mtv_1c": "h", "ktc_12": true, "ktc_zz": true, } 前两个format和has\u impl字段是已知的。此外,对象可以具有任意数量的mtv_XX和ktc_XX类字段 这样一个对象在proto3中可以表示吗?你会怎么做 以下可能是一个明显的起点。有没有一个组合,可以在这里使用 m

Protocol buffers 通过UDP解码协议

我有一个通过UDP多播发送的Protobuf序列化数据。我使用bash中的socat阅读它,如下所示 socat UDP4-RECVFROM:1277,ip-add-membership=239.195.1.2:192.168.254.5,fork,reuseaddr - 我想把它和protoc连接起来,以便在每个包中都能解码数据。我该怎么做? 当我这样做的时候 socat UDP4-RECVFROM:1277,ip-add-membership=239.195.1.2:192.168.25

Protocol buffers 是否可以将protobuf二进制文件序列化/反序列化为类似json的文本可编辑模式?

我在proto文件中有结构定义 我也想在某个地方有数据定义,用xml或json或类似的格式 所以接下来我将把它放(编译)到bin并作为二进制文件使用 是否有好的方法按照proto-struct定义将类似于json的文本文件序列化到protobuf-bin中?protobuf中实际上包含一个基于文本的协议;这方面的API是,例如: 但是,这并不是实际情况,您应该注意,并非所有实现都支持这种格式。就我个人而言,我会将任何“序列化为xml/json/etc”作为单独的需求来处理,并使用不同的工具(专用

Protocol buffers 协议缓冲区可选整数,与零不同

在Protocol Buffer version 3中,我试图找出获得可选整数值的最佳方法,其中零和缺席应该是不同的情况。我能想到的最好的办法是制作一种类型: message int64Option { oneof option { bool empty = 14; int64 value = 15; } } 这是一个好主意,还是有更好的方法?proto3中有两个主要选项。第一种方法是像您建议的那样使用oneof,但实际上您只需要在oneof中有

Protocol buffers protobuf能编码概率分布吗?

假设我有这个 message Game { string name = 1; repeated float probability = 2; } 其中,概率字段表示分布。这意味着每个值必须是非负的,且总和必须为1 是否有更好的方法使用protobuf(例如,类似于非负浮点数或在值和上设置边界的东西)?否,协议缓冲区中没有无符号浮点类型,也没有任何自动施加的类似约束 当您反序列化游戏时,您可能希望在业务代码中添加约束条件——意识到分数结果的浮点近似值之和可能不完全是1.0。您需要

Protocol buffers 任何客户端都可以从服务器生成.proto文件吗?

我已经看到,Evans CLI可用于从客户端设置确定服务器上公开的消息和会话。服务器正在使用的.proto文件(包含消息和会话详细信息)是否可以在客户端设置中生成?如果是,那么Evans如何访问这些消息 我不熟悉gRPC的概念,因此这将非常有帮助。我只知道,在GoLang中,我们使用reflector使Evans CLI能够访问消息和服务。服务器可以选择启用反射,以便您可以查看已注册的RPC和proto消息。以下是关于它的一般性宣传: 您可以使用grpc_cli(打包为grpc的一部分)获取R

Protocol buffers grpc可读/ascii(开发者害怕二进制)

到目前为止,我只阅读了关于grpc和 我和一些队友谈过。他们以前从未听说过。他们害怕二进制数据传输 他们担心调试很困难 我能理解他们的感受 有没有一种方法可以通过可读的方式访问grpc/协议缓冲区(用于调试?要回答您的直接问题,是的,您可以使用protobuf的文本格式表示形式TextFormat。它不提供与普通protobuf相同的向后兼容性保证,但它是人类可读的,并且看起来类似于JSON 也就是说,通常不需要能够在线路上读取二进制形式的protobufs。Protos的二进制形式可以很容易地

Protocol buffers 如何获取protobuf消息中的所有字段?

这些天我在使用protobuf,我遇到了一个问题。 我想获取protobuf消息中的所有字段,并且我知道一种方法,使用field\u count()获取消息的字段计数,然后使用函数FindFieldByNumber()获取所有字段。但是,如果消息的字段号不连续,例如: message MyPb { uint32 id =1; int32 score =2; string name =5; uint32 high =6; } 然后,MyPb的字段计数是4,我使用 fo

Protocol buffers protobuf数据类型可以升级吗?

我是Protobuf的新手,所以不知道这是否可行。如果在一个proto文件中我有一个fixed32数据类型,我是否可以将其升级到fixed64,以便也可以读取所有现有的fixed32值(即向后兼容性) 如果没有,执行此类升级的最佳方式是什么?tl;医生:是的,但不包括您的确切类型。 您可以在各种编码类型之间自由移动,因为它们在导线上使用完全相同的编码 从: int32、uint32、int64、uint64和bool都是兼容的–这意味着您可以将字段从一种类型更改为另一种类型,而无需中断前后兼容。

Protocol buffers 从命令行运行大量protoc文件的protoc编译器

我有大约150个proto文件,正试图在Windows10中编译它们。对于其中一个名为a.proto的命令行,我在Windows命令行中执行以下操作: protoc-I.--python_out=\a、 原型 当然,我不希望为不同的文件键入150次。编译所有proto文件的最简单方法是什么?使用Git Bash,使用通配符为目录中的每个.proto文件执行proto(不在cmd/powershell中) 这里的其他答案建议使用3.4.0版来使用通配符,我还没有尝试过,但对我来说,3.6.0版不起

Protocol buffers 向重复消息添加必填字段时出现问题

我使用的是C++11。我的问题是,我无法将必填字段添加到重复消息中 Sample.Proto message HDPMsg {    required MsgHeaderSig messageHeader = 1;    optional int64 tag = 18999; } message InfusionEventContainer {    repeated InfusionEventSig infusionOngoingEvents = 5;    optional int64 ta

Protocol buffers Protobuf命名约定

除了Google提供的很短的消息外,以下是我对命名Google协议缓冲区消息的想法 在消息类型名称的末尾使用“Message” 这使得在源代码中很容易看到类是protobuf生成的类。这还有一个优点,如果我有一个丰富的特定于域的类,那么它可以有真实的名称,比如protobuf类的AddressBookMessage和真实类的AddressBook 对于Java用户来说,让Java\u outer\u classname以Protos结尾似乎是标准的 起初我没有注意到这一点,所以我当前的pr

Protocol buffers 如何在协议缓冲区中获取MessageBuilder状态?

使用Message.Builder.build()时,如果未设置必填字段,则会引发异常。有没有办法确定是否会抛出异常?i、 e.类似iSReadyToBuild的东西?有一个buildPartial方法,但它没有说明生成是完整的还是部分的。您正在查找的方法被称为“”。您正在查找的方法被称为“”。您可以简单地运行“build()方法,如果您捕获了异常,那么您就知道它还没有准备好=)是的,我只是在寻找一些更干净的代码。因为我必须处理这种情况,我不喜欢将异常处理与代码逻辑混为一谈。你可以简单地运行“b

Protocol buffers protoc不生成服务存根文件

我刚刚开始玩google proto。当我试图编译proto java示例中的proto文件时,它不会生成任何grpc文件 原始文件, 终端输出 rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$protoc --libprotoc 3.0.0版rsonkhla@raman-OptiPlex-9020:~/sandbox/grpc java/examples$protoc --java_out=test/-I.././grpc

Protocol buffers 如何打开/查看.proto文件扩展名

我正在从事一个开源项目()。通过这个应用程序,我可以记录一个实验。记录的实验以.proto扩展名存储。我试图编译它们来生成类,但失败了 有没有办法打开这类文件?在协议缓冲区中,。proto文件通常是描述消息而不是数据的基于文本的模式DSL;然而,这些文件可能确实包含二进制数据(只是…不寻常)。仔细检查文件:如果它们看起来像: message Foo { int32 bar = 1; // etc } 然后是图式;如果它是二进制的,它可能是数据 至于如何阅读:最简单的选择是已经有了模

Protocol buffers 如何使用python ProtoBuf库使用pssh python脚本?

在本文档中,我无法理解Python ProtoBuf库与使用pssh Python脚本的关系 如何在没有proto文件的情况下构建pssh.py脚本?您可以将构建脚本与shaka packager一起使用,也可以直接从中生成python protobuf文件 协议缓冲区很好地描述了如何使用protoc编译必要的python代码 如果您不想要或不需要任何其他shaka packager产品,但只想使用pssh.py,则可以修改此部分: # Append the local protobuf loc

Protocol buffers 什么';使用协议缓冲区进行多态性的正确方法是什么?

我正在尝试长期序列化java中由强类层次结构相关的一组对象,由于它们的简单性、性能和易于升级,我希望使用协议缓冲区来实现这一点。然而,它们并没有为多态性提供太多支持。现在,我处理它的方式是使用一个“一条消息来统治所有人”解决方案,该解决方案具有一个必需的字符串uri字段,允许我通过反射实例化正确的类型,然后为我可以序列化的所有其他可能的类提供一组可选字段,只使用其中一个(基于uri字段的值)。是否有更好的方法来处理多态性,或者这是我将要得到的好方法?您考虑过使用吗?您可以让uri字段确定要使用的

Protocol buffers 不带参数的Protobuf RPC服务方法

我试图描述一个使用Google的协议缓冲区的RPC服务 service WhoamiService { rpc WhoAreYou() returns (Whoami) {} } message Whoami { optional bytes request_id = 1; optional string hostname = 2; optional string message = 3; } 当我试图编译这个定义时,我得到一个错误预期的类型名,指向WhoAreYou()片段

Protocol buffers 协议缓冲区继承

有没有办法制作一个扩展现有原型文件的原型文件?例如,在一个新的原型文件中包含google的openrtb,它将继承当前的文件对象,并更改文件的其他部分,例如定义新的枚举字段(覆盖现有的枚举)。我认为这不是您想要的。您可以导入其他定义并将其包装。但是扩展不打算扩展的现有类型是不可能的。不过,您可以编辑原始版本。谢谢您的回复,修改原始版本是一个问题,因为包含openrtb-core.jar已经包含了已编译的原型。有没有办法隐藏这个类?我尝试使用泛型,但类型类需要扩展原始类,这是不可能的。

Protocol buffers protobuf:。proto文件不在源目录下

我是protobuf的新手。在正式教程之后,我下载了最新版本,并尝试运行示例examples/addressbook.proto 在地址簿.proto中有一行 导入“google/protobuf/timestamp.proto”, 因此,需要提供一个源目录(-I=),以便导入此目录 我的问题是,在下载的版本中,我在examples下有addressbook.proto,而所需的google/protobuf/timestamp.proto在src 当我这样做的时候 protoc示例/addre

Protocol buffers 如何从重复类型protobuf创建对象

我要找的是一个返回重复字段消息的函数 我知道有Reflection::AddMessage,它具有我想要的返回类型,但我不想添加消息,只需返回该消息的对象即可 下面是我尝试执行的一个示例,假设我在.proto文件中有一条消息: message Bar{ uint32 t x = 1; uint64 t y = 2; } message Foo{ repeated Bar myMessage = 1; } 我正在使用反射来迭代Foo消息,我希望能够做到以下几点: Mes

Protocol buffers protobuf any字段中字符串的typeURL是什么

在Protobuf中,any字段由数据缓冲区和描述参考底图格式的typeURL组成 问题:如果我想在any字段中输入一个字符串,那么正确的typeURL是什么?我最近收到了同样的问题,但是,在阅读了文档之后,我担心我们看错了方向,正如 Any包含任意序列化的协议缓冲区消息以及 描述序列化消息类型的URL 看到了吗?它被设计用来保存信息。由于string根本不是消息,因此您应该设计一条新消息,并使字符串成为消息的唯一字段 message ExampleString { string The

Protocol buffers 如何使用protobuf二进制文件在PUB/SUB中进行过滤?

假设我想用ZMQ使用cake.proto中定义的协议序列化和传输protobuf二进制文件: syntax = "proto3"; message Cake { int32 radius = 1; } 我可以找到许多PUB/SUB模式的示例,其中订阅者使用字符串过滤主题: socket.setsockopt_字符串(zmq.SUBSCRIBE,“abc”) 但对于protobuf二进制文件,订阅主题是如何工作的呢?我是使用字节本身,还是ZMQ为消息提供了一个可以用于此类情况的头的包装

Protocol buffers Protobuf,如何在二进制文件中添加自定义版本详细信息

我想用我自己的版本号标记每个protobuf序列化数据。因此,如果需要,我可以检查用于序列化数据的版本。虽然protobuf是围绕这个想法设计的,所以你们不需要检查版本 要做到这一点,我可以使用与在.net序列化中相同的方法在其中添加版本字段 我只是想确认这也是protobuf中的首选方法 class protodata1 { public protodata1() { version = 1; } [Protomember(1)] int version { get; se

Protocol buffers 如何解码protobuf二进制响应

我已经创建了一个测试应用程序,可以识别一些图像使用护目镜。它对我有效,但我收到binaryt protobuf响应。我没有原始文件,只有二进制响应。如何从中获取数据?(已经发送了一些关于熊瓶的图片,并得到了nex的回复): 需要获取字符串“Tuborg”,如果可能的话,输入“Logo”我假设真正的问题是如何解码protobufs,而不是如何使用Java从线路中读取二进制文件 你的问题的答案可以找到 简单地说,在网络上,protobuf被编码为的3元组,其中键是分配给.proto模式中字段的字段号

Protocol buffers Protobuf二进制格式的设计:性能和变量

我需要设计一种二进制格式来保存科学应用程序中的数据。这些数据必须以二进制格式编码,任何其他应用程序都无法轻松读取(这是我们的一些客户的要求)。因此,我们决定建立我们自己的二进制格式,它的编码器和解码器 我们从许多二进制格式中得到了一些启发,包括protobuf。让我困惑的一件事是protobuf编码嵌入消息长度的方式。根据,嵌入消息的大小在一开始就作为变量进行编码。 但在我们编码一条嵌入的消息之前,我们还不知道它的大小(比如一条包含许多编码为varint的整数的嵌入消息)。因此,在将消息写入磁盘

Protocol buffers 在GRPC的protobuf的proto文件中导入时间戳

我正在尝试使用gRPC,并使用exchange消息格式作为protobuf。 我想在消息中添加timestamp字段,但我不知道在proto文件中添加import语句的正确方法。我正在使用Golang,因此需要输出为.pb.goGrpc没有AFAIK的时间戳。 我通常使用Unix的Epoch-the go函数 Unix(sec int64, nsec int64) 及 是您的fried您可以从标准Go Protobuf repo中的:导入时间戳 import ( "github.co

Protocol buffers 导入另一个proto文件时出错

我试图编译一个proto文件以转换为.java时出错。 你能指出我遗漏了什么吗 protoc --proto_path=src\main\resources\proto --java_out=src\main\java src\main\resources\proto\PayloadProtocol.proto PayloadProtocol.proto:32:14: "DataContainer" is not defined. PayloadProtocol.proto: warning:

Protocol buffers Acumos的Protobuf版本是什么

模型用户需要什么Protobuf版本? AcumosError:从protobuf:b'MMGfiPybWYusryVpTePnBbAVjcGAasJx/model生成源代码时出错。proto:1:10:无法识别的语法标识符“proto3”。此解析器仅识别“proto2”。\n'Acumos需要Google协议缓冲区编译器版本3或更高版本。最新版本是3.6.1,二进制文件和源代码可从 我的机器愉快地运行着: $ protoc --version libprotoc 3.5.1 另外,我希望在你

Protocol buffers 将基于Java的Grpc服务器与基于C的客户端一起使用时出现传输失败错误

我正在使用spring boot(2.2.2)和Grpc server spring boot starter java库开发一个基于java的Grpc服务器。 我的客户端应用程序是一个C#应用程序(netcoreapp3.1)。这两个应用程序都在我的笔记本电脑上运行 这是我的原始文件 syntax = "proto3"; option java_multiple_files = true; option java_package = "com.honeywell.EOM.SystemAPI.

Protocol buffers protoc或任何工具都可以进行JSON protobuf转换吗?

Protobuf是二进制格式,它还具有等效的文本格式和JSON格式 protoc有--encode和--decode选项来进行文本二进制转换 但是有没有一个小工具可以进行JSON二进制转换呢?如下图所示: tool --encode input.json def.proto > pb-output.bin 及 谢谢 看一看。谢谢@Azeem。您是否为这个问题创建了工具,;),自从我看到还不到一天?嗯,有点,不客气!:-)但并非完全正确。;-)我之前写过这个插件:。所以,我已经有了一个想

Protocol buffers grpc和protobuf-当另一方不同步释放时,如何处理新字段

我遇到了一种情况,grpc通信的另一端与他们的发布不同步。因此,我的上级希望我在短时间内(如两周)添加一个字段,如果对方填写或不填写,该字段将起作用 我相信我可以通过将它添加到proto消息的末尾来做到这一点,这样其他字段的索引就不会改变。根据我在谷歌上搜索到的,可选字段在3.15版本之前不可用,所以我必须使用变通方法 向我介绍的解决方法是使用中的一种。然而,我不是100%确定那是什么样子。所有的例子都显示了字段本身。属于其中一个值的索引是否独立于属于消息其余部分的索引 message Test

Protocol buffers 从生成的协议缓冲区类继承

协议缓冲区文档警告 绝不应通过继承向生成的类添加行为 从他们那里。这将破坏内部机制,是不好的 无论如何,面向对象的实践 资料来源: 我的问题分为两部分: 这会打破什么内部机制 在什么方面这不是一个好的OO实践呢 “出了什么问题”将是非常具体的实现。如果您引用了一个特定的实现,也许可以回答这个问题,但从更一般的意义上说:这不是一个受支持的场景,如果您使用子类,则不要求实现正常工作。这是一种未定义的行为,这意味着一切。此外,协议缓冲区不支持继承,因为并非所有目标平台都支持继承。主要想法: 可能有代

Protocol buffers 头文件包含由“protoc”生成的文件中的路径`

当我像这样调用protoc时 protoc --cpp_out=. path/to/test.proto #include "path/to/test.pb.h" 档案 path/to/test.pb.cc和 path/to/test.pb.h 这就是我想要的。但是,由于cc需要h,因此h如下所示 protoc --cpp_out=. path/to/test.proto #include "path/to/test.pb.h" 这不是我想要的。背景是我的构建工具(scons)从项目

Protocol buffers 如何将repeated字段设置为在protobuf中至少重复一次

我已经开始使用谷歌的protobuf,有重复的字段类型: repeated: this field can be repeated any number of times (including zero) in a well-formed message. The order of the repeated values will be preserved. 我需要知道的是,如何使一条消息中的重复字段至少重复一次。所以我需要排除这种类型中的零次。我可以在我的代码中做这样的断言,但是在.prot

Protocol buffers ';没有可用的包protobuf-devel';centos 7上的错误

我试图使用yum在CentOS7上安装protobuf-devel,但它给出了以下错误: No package protobuf-devel available 我没有更改yum资源,只是使用了我公司的代理,我能解决这个问题而不是通过源代码安装protobuf吗?这对我来说很有效: wget http://cbs.centos.org/kojifiles/packages/protobuf/2.5.0/10.el7.centos/x86_64/protobuf-2.5.0-10.el7.cen

Protocol buffers 如何从C++;?

我得到了一个简单的代码表单教程,并将其输出到.pb文件,如下所示: mnist_softmax_train.py x = tf.placeholder("float", shape=[None, 784], name='input_x') y_ = tf.placeholder("float", shape=[None, 10], name='input_y') W = tf.Variable(tf.zeros([784, 10]), name='W') b = tf.Variable(tf.

Protocol buffers Protobuf包声明

我有一个带有一些消息定义的原型文件。我在proto文件的开头声明了package com.myorganization。例如,该文件中有一个消息声明。如果我序列化该消息,并且该消息的接收者对消息A有相同的定义,但它驻留在不同的包和不同的原型文件中,并且可能使用不同的语言。接收方是否会反序列化消息A?如果两个消息定义相同,则是,这将起作用。字段编号匹配很重要;如果字段名不同,那么就二进制格式而言,这实际上并不重要。问题实际上是关于包名是否是protobuf中消息名的一部分?这些名称根本没有作为二进

Protocol buffers Protobuf3:如何描述重复字符串的映射?

报告说: map\u字段=N …其中键类型可以是任何整型或字符串类型(因此,任何 标量类型(浮点类型和字节除外)。值类型 可以是任何类型 我想定义一个map字段,但在我的libprotoc 3.0.0上它似乎是非法的,它抱怨预期“>”。所以我想知道是否有任何方法可以将重复的字符串放入地图中 一个可能的解决办法是: message ListOfString { repeated string value = 1; } // Then define: map<string, List

Protocol buffers 减少protobuf消息大小的最佳实践? < P>我使用C中的客户端的原始Buffnet网络消息向C++中的服务器发送位置/旋转数据(Vistr3,四元数)。

一开始,我尝试了一种分层的方法,即 Message Vector3 { int32 x = 1; int32 y = 2; int32 z = 3; } Message Transform { Vector3 trackedPos1 = 1; Vector3 trackedPos2 = 2; Vector3 trackedPos3 = 3; } 层次结构越来越大,protobuff消息的开销也随之增加。我可以将这些消息扁平化为单个消息,但不确定它将变得如何可管理 那么,有人知道如何以较低的

Protocol buffers 我可以将gRPC协议定义合成多个协议文件吗?

我有一个这样的GRPCAPI定义(来自Akka文档示例),但要长得多(4000行,仅是服务部分) 服务迎宾服务{ rpc SayHello(HelloRequest)返回(HelloReply){} rpc-ItKeepsTalking(流HelloRequest)返回(HelloReply){ rpc ItKeepsReplying(HelloRequest)返回(流HelloReply){} rpc StreamHellos(stream HelloRequest)返回(stream Hel

Protocol buffers 超时时从服务器输出哪个gRPC状态

上下文:我有一个gRPC服务(一元API),它调用SOAP服务并返回gRPC状态作为响应 问题:当对SOAP服务的调用超时时,应该返回哪个grpc.status |GRPClient----?----|grpcServer |--超时--| SOAP服务|超过截止日期|可能是一个不错的选择,即使gRPC客户端可能没有在RPC上设置截止日期。因为您知道gRPC服务器的下游请求由于超时而失败,所以可以将其解释为超过截止日期的情况,并将该错误发送给上游客户端。代码列表如下所示:

Protocol buffers 为gRPC消息建模的最佳方法

我想为双向流媒体的消息建模。在这两个方向上,我可以期待不同类型的信息,我不确定更好的做法是什么。目前有两个想法: message MyMessage { MessageType type = 1; string payload = 2; } 在本例中,我将使用一个枚举来定义所使用的消息类型,以及将被序列化和反序列化到客户端和服务器端模型中的JSON负载。第二种方法是: message MyMessage { oneof type { A typeA =

Protocol buffers 在应用程序中同时使用nanopb和protobuf进行序列化/反序列化

是否可能有两个应用程序App-1和App-2,一个在OS-1上运行,另一个在OS-2上运行。App-1使用nanopb序列化/反序列化数据,并与App-2通信。App-2使用google protobuf序列化/反序列化数据,并与App-1通信。是。这是protobuf的一个主要特点,能够用不同的语言与实现通信。所有protobuf库都应该相互兼容 纳米谷歌与C++的原Bufff库的具体情况是用NeavaBuffely>代码>测试用例,二进制输出字节等于两个库的字节相等。所以,在序列化/反序列化

  1    2   3   4   5   6  ... 下一页 最后一页 共 7 页