问题标签 [capnproto]
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.
websocket - 如何区分 Cap'n Proto 中的多种消息类型?
我正在使用 Cap'n proto 在多个客户端和我的 websocket 服务器之间发送和检索消息。
由于我只有一个 websocket 通道来发送和接收数据并且可以发送各种类型的消息,因此在尝试解码时我需要一种区分 then 的方法。
这如何在 Cap'n proto 中正确完成?
我认为这个问题与语言无关,但如果需要一种语言,我的服务器使用 Rust,客户端使用 Rust、Go 和 Javascript,因此非常感谢能够在所有这些语言中工作的解决方案。
json - Flatbuffers vs CBOR
请帮助提出Flatbuffers和CBOR协议的一些优点和缺点。这两种二进制格式在他们的网站上都声称很好,但我无法在两者之间做出一些很好的区别。
平面缓冲区:
优势:
- FlatBuffer、Cap'n proto 和其他类似解决方案中的严格输入被视为性能的主要关键点,因为不需要额外的编码/解码。
- 数据模型允许使用紧凑的数据结构和快速访问的类型对象的简单偏移
- FlatBuffers 不需要对辅助表示进行解析/解包步骤,然后您就可以访问通常与每个对象内存分配相结合的数据。
坏处:
- 新的,不像 CBOR 那样标准化。
CBOR
优势:
- 可以完全在流中创建和处理,无需额外内存
- 不必预先定义任何模式,因为我们的数据是动态的和多变的
- 它是来自 IETF 的开放国际标准,使其成为比专有标准更好的选择。
- 它专为低内存、非转换、基于流的处理而设计,同时还为其他数据类型提供扩展
坏处:
- CBOR 说它遵循 JSON 模型(所以不是严格类型的对象)
- 它以相同类型的对象(字符串、整数、映射等)开始。
PS:
感觉在 CBOR 中管理类型与 flatbuffers 相比性能成本很高,但由于 CBOR 是标准化协议,如果这种差异不是很大,我倾向于更喜欢它。请让我知道你们都推荐哪两个以及为什么。
protocol-buffers - CapnProto 最大文件大小
目前我们正在使用 ProtocolBuffers 在 python 和 C++ 之间交换数据。但是,我们遇到了协议缓冲区的最大文件大小限制,并且正在考虑将所有内容切换到 Cap'n Proto。但是,由于它与协议缓冲区有些相关,我想知道Cap'n Proto 是否也对最大文件大小有限制?
c++ - 使用非原始填充 CapnProto 列表
根据 CapnProto 文档:(注意:我使用的是 C++ 版本)
对于 Foo 是非原始类型的 List,operator[] 和 iterator::operator*() 返回的类型是 Foo::Reader(对于 List::Reader)或 Foo::Builder(对于 List::Builder) . 构建器的 set 方法将 Foo::Reader 作为其第二个参数。
虽然使用“set”似乎适用于非原始类型: Other stack overflow question for primitives only
自动生成的非原始列表似乎没有“设置”功能。我的 CapnProto 生成是否以某种方式失败,或者是否有另一种方法可以在非原始列表中设置元素?
c++ - Capnproto - 在服务器回调中发出客户端请求
我需要在服务器回调中执行一些客户端请求,并且不确定在哪里存储创建的对象capnp::EzRpcClient
和CompareNetwork::Client comparer
对象。那是因为客户超出了范围(我认为 - 我只是得到一个 SEGFAULT,但这似乎是原因)。它基本上是一个将加载请求转发给它的从属的主机(从属可以通过 REG 请求注册并存储它们的地址)。
那么 - 我应该在哪里/如何存储客户端对象?这有什么“最佳实践”吗?我认为暂时将它们存储在某个类成员变量中有点脏,不是吗?
GroupMaster2.cpp:
GroupNetworkData.capnp:
提前致谢!dvs23
c++ - Cap'n Proto - 去/序列化结构到/来自 std::string 以存储在 LevelDB 中
我想将一些 Capnproto 结构存储在 LevelDB 中,因此我必须将其序列化为字符串,并稍后从 std::string 反序列化。目前,我使用以下内容(改编自此处:https ://groups.google.com/forum/#!msg/capnproto/viZXnQ5iN50/B-hSgZ1yLWUJ ):
它基本上可以工作,但是上面链接中的人不确定这种方法以后是否会导致错误,并且由于讨论已经很老了,我想问是否有更好的方法。最后有人说“使用 memcpy!”,但我不确定这是否有用,以及如何使用FlatArrayMessageReader
.
提前致谢!
dvs23
更新:
我尝试实施与字对齐相关的建议:
c++ - 在 capnproto 中实现一个等待服务端的客户端连接函数
我正在尝试在 capnproto 中实现类似 boost 的 connect 函数,它会阻塞并重试直到服务器启动,或者 basic_socket::async_connect 让我实现一个回调来尝试再次连接。
例如,运行以下代码:
如果服务器关闭,显然会抛出异常。
所以我的问题是:
- 有没有办法注册一个回调来处理连接/连接失败?
- capnproto 中是否有已经启用自动重新连接的内置机制?
capnproto - CapnProto 中的前向声明
在 CapnProto 模式中,有任何方法可以前向声明结构,因此您可以制作这样的树结构:
如果我尝试编译它,编译器会给出非常有用的错误消息Parse error
。我认为它在抱怨,因为我Program
在声明之前使用了它。
有没有办法解决?
go - 使用 cap'n'proto 读取数据时获取 EOF
脚步:
}
结果:
结果content.out仅包含第一个(可能是第一个)数据块。我究竟做错了什么?谢谢!
没有可用的详细信息。
capnproto - 在 Cap'n Proto 中使用唯一 ID 的示例
Cap'n Proto文档包含关于唯一 ID 背后基本原理的一句话:
ID 的存在是为了提供一种相对较短但明确的方式来引用另一个上下文中的类型或注释。
我找不到任何这种引用的例子。有人可以指点我吗?谢谢。