问题标签 [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.
c++ - 您能否将相同的 protobuf 消息静态链接到多个 DLL 中 - 然后让这些 DLL 一起工作?
我们正在使用 google protobufs 在网络上传递数据。事物的服务器端类似于插件,因此处理 protobuf 消息的几个模块是 DLL。一些 DLL 依赖于其他 DLL,并使用其他的消息来定义自己的消息。
因此,A.DLL 具有a.proto
生成a.pb.h/cc
的消息类MsgA
。使用dllexport_decl
protoc 编译器上的未记录选项,消息类被声明为 DLL 导出。
现在,B.DLL 依赖于 A.DLL,b.proto
看起来像这样:
最后,将各部分组合在一起的可执行文件也取决于 message MsgA
。protobuf 库也被构建为 DLL 并链接到所有内容。这一切都构建并运行。
但是,有光明势力要求我们减少 DLL 分发!因此,我将模块 A(它只是许多其他插件 DLL 使用的消息和小工具的集合)构建为静态库而不是 DLL。B.DLL 和可执行文件都链接到 A 并且一切都很好 - 到目前为止。
由于 A 是静态链接的,MsgA
因此在所有 DLL 和 EXE 中得到完全定义。没关系,因为生成的 C++ 代码中的所有静态数据都是 const。那么如果最终过程中有多个副本怎么办 - 所有副本都是相同的。
但是,当我运行新构建的进程时,libproto 会抛出一个实际有用的异常——MsgA 的文件 ID 已经存在于描述符映射(或类似的东西)中。换句话说,存在多个定义的事实MsgA
是一个主要问题。
所以,最后,这是一个问题:
- 如果我们静态链接 libproto 而不是将其用作 DLL,错误会消失吗?
MsgA
分散在 DLL中的多个定义真的安全吗?
一旦我开始重建 protobuf 库,我可能会在几天内回答第一点,但第二点超出了我目前的知识范围。我也希望得到一个快速向上或向下的答案,这可能会为我省去重新编译原型库的麻烦。
java - Java 中协议缓冲区分隔的 I/O 函数是否有 C++ 等效项?
我正在尝试从 C++ 和 Java 文件中读取/写入多个协议缓冲区消息。谷歌建议在消息之前写长度前缀,但默认情况下没有办法这样做(我可以看到)。
但是,2.1.0 版中的 Java API 收到了一组“定界”I/O 函数,这些函数显然可以完成这项工作:
有 C++ 等价物吗?如果没有,Java API 附加的大小前缀的有线格式是什么,所以我可以在 C++ 中解析这些消息?
更新:
这些现在存在于google/protobuf/util/delimited_message_util.h
v3.3.0 中。
c# - 从 windows mobile 如何将 C# 对象发送到 http 流
场景:Windows Mobile C# Compact framework 2.0 或 3.5 Protobuf 对象
我需要将一个对象发送到一个 http url (Post)。之后,我将等待响应并收到对象的修改版本。关于如何连接到 http 流并传入序列化对象的任何输入?
.net - Protobuf-net - 序列化 .NET GUID - 如何在 C++ 中读取它?
我已经在我的 .NET 应用程序中使用 Protobuf-net 相对轻松地序列化了一个对象。我还使用 GetProto() 命令获得了 protobuf-net 生成的 .proto 文件。
在 .NET 生成的 .proto 文件中,我的 GUID 字段的类型为“bcl.guid”。
现在我希望用 C++ 编译 .proto 文件,这样我就可以反序列化数据。
但是,C++ protoc.exe 编译器不知道如何解释 bcl.guid,并抛出错误消息“VideoAudioStructs.proto:11:13: "Guid" is not defined。” 我该怎么办?
django - django:调用远程服务杀死python
我正在编写一个与远程服务通信的 django 应用程序(在我的 VPN 上但不在本地托管)。我可以通过 django shell 成功地与服务通信,但是当我尝试调用完全相同的函数,从网络表单发布信息时,开发服务器就死了。
我原以为 shell 和开发服务器的行为方式完全相同。我唯一能想到的是外壳可能更“耐心”,等待响应?
通信通过协议缓冲区发生。
帮助!
java - 使用协议缓冲区进行二进制日志记录
我们正在考虑使用 Protocol Buffers 进行二进制日志记录,因为:
- 无论如何,这就是我们编码对象的方式
- 它相对紧凑,读/写速度快等。
也就是说,我们应该如何去做并不明显,因为 API 倾向于专注于创建整个对象,因此将 DataLogEntry 列表包装为 DataLogFile 中的重复字段将是您在消息传递方面所做的事情,但是我们真正想要的只是能够写入然后读取整个 DataLogEntry,将其附加到文件的末尾。
我们这样做遇到的第一个问题是这样做(在测试中:
只会导致从流中读取 1 个 DataLogEntry。没有 isAtEnd,它永远不会停止。
想法?
编辑:我已经切换到使用 entry.writeDelimitedTo 和 BidLogEntry.parseDelimitedFrom ,这似乎工作......
c# - protobuf-net - 在 C++ 端反序列化的问题:(
我在我的 .NET 应用程序中使用 ProtoBuf-Net 来序列化以下内容:(以 .proto 格式)
我的目标是将其序列化并将其作为单个样本注入 ASF 文件。
我称之为序列化:
然后我从 ms 对象中得到一个字节数组:
我把这个字节数组放在 ASF 中。最大的问题是我的 C++ 应用程序可以很好地读取 ASF 示例,当我尝试反序列化它时遇到内存访问冲突:(
这是我的 C++ 代码:
(其中 m_screenBuffer 是 ProtoScreenBuffer,serBuffer 是我从 ASF 文件中得到的原始字节数组,dwInputDataLen 是它的长度。)
对于我正在尝试做的事情,我在这里做的任何事情都是错误的吗(在 C# .NET 中序列化并在 C++ 中反序列化?)
非常感谢。
罗伊
c++ - 如何通过套接字发送.proto(协议缓冲区)中定义的类
我正在尝试通过套接字发送原型,但出现分段错误。有人可以帮忙告诉我这个例子有什么问题吗?
文件.proto
xxx.cpp
感谢您的帮助和回复-
c++ - Linux 中的 Google protobuf
我正在使用 protobuf 和 Linux。它的编译器在哪里protoc
?我已经从主站点下载了包,编译并安装成功,但我找不到protoc
构建自己的格式文件。它在哪里?
更新 这是我构建protobuf的文件夹:
没有我需要的二进制文件。
serialization - XStream <-> 替代二进制格式(例如协议缓冲区)
我们目前使用 XStream 将我们的 Web 服务输入/输出编码为 XML。但是,我们正在考虑切换到具有多种语言(protobuf、Thrift、Hessian 等)的代码生成器的二进制格式,以便更轻松地支持新客户,减少对手动编码的依赖(也更好地支持我们的包含二进制数据的消息格式) .
然而,我们在服务器上的大多数对象都是 POJO,使用 XStream 通过反射和注释处理序列化,并且这些库中的大多数假设它们将自己生成 POJO。我可以想到几种连接替代库的方法:
为目标格式编写一个 XStream 封送拆收器。
编写自定义代码以将 POJO 编组到/来自替代库生成的类。
子类化生成的类以实现 POJO 逻辑。可能需要一些重写。(我还提到我们想使用 Terracotta 吗?)
使用另一个同时支持反射(如 XStream)和代码生成的库。
但是我不确定哪个序列化库最适合上述技术。