问题标签 [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.

0 投票
1 回答
99 浏览

c++ - Cap'nProto 中的读/写配置结构

我有一个 C++ 嵌入式应用程序,我想创建一个 Web 界面来配置它。

我的计划是在 Cap'nProto 中描述配置结构,然后在 C++ 和 Javascript 端使用生成的代码。

配置场景如下:

  1. 网络应用程序要求实际配置(Javascript)

  2. 本机应用程序服务于实际配置 - 序列化/写入(C++)

  3. Web 应用程序在反序列化/读取 (Javascript) 后显示实际配置
  4. 用户可以在 Web 应用程序中修改配置 - 如何?(Javascript)
  5. Web 应用程序发回新配置 - 序列化/写入 (Javascript)
  6. 本机应用程序在反序列化/读取 (C++) 后使用新配置
  7. 本机应用程序可以修改配置 - 如何?(C++)

4和7是棘手的部分,因为据我了解API我只能反序列化只读阅读器,但是我想稍后修改和重新序列化它。

我的问题如下:

  • 所描述的场景是做我想做的最好的方法还是我应该做一些完全不同的事情?
  • 我可以反序列化构建器吗?或以某种方式将阅读器转变为构建器(无需复制)
  • 我应该使用生成的 C++ / Javascript 结构作为配置的直接来源(实际代码 <-> Cap'nProto 结构)还是应该引入“本机”结构与之交互(实际代码 <-> “本机”结构 <-> (序列化/反序列化)Cap'nProto 结构)
0 投票
1 回答
692 浏览

c++ - Cap'n Proto - 如何编译生成的 C++ 文件

我是 Cap'n Proto 的新手,我正在尝试编译此处找到的计算器示例: https ://github.com/capnproto/capnproto/blob/master/c%2B%2B/samples/calculator.capnp

我使用此命令capnp compile -oc++ calculator.capnp 生成calculator.capnp.c++calculator.capnp.h文件。

我尝试calculator.capnp.c++使用以下命令编译文件:g++ -o calc calculator.capnp.c++ -lcapnp -lkj -lcapnp-rpc -lkj-async但收到此错误消息:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: 在函数'_start'中: (.text +0x20):未定义对“main”collect2 的引用:错误:ld 返回 1 退出状态

我浏览了官方文档和其他资源,但我没有找到有关如何运行此示例(或任何类似内容)的说明。我该如何继续并运行它?

0 投票
2 回答
196 浏览

python - 如何在 pycapnp 中实例化通用 Cap'n Proto 类型

我无法弄清楚如何在 pycapnp 中实例化 Option(T) 类型。

我试图实例化一条新消息,然后设置“some”的值,但这样做会丢失类型信息。

我希望通过添加的结构来键入选项,但是它会丢失所有类型信息,并且我无法访问放置在“某些”联合值中的对象的成员。

0 投票
1 回答
437 浏览

c++ - 将向量的内容添加到 Capnproto 地图对象中

正如这个问题所回答的:

请注意,Cap'n Proto 结构中的单个 List 值限制为 2^29-1 个元素

由于单个列表的此限制,我试图将包含超过此数量的项目的列表拆分为列表映射。为此,我使用以下架构:

我一直在研究 Cap'n Proto 的所有示例,但我找不到一个包含有关如何创建并将元素添加到 Capn'Proto 列表中的示例,然后将此列表添加到 Cap'n Proto 地图中的示例. 例如,考虑以下代码:

0 投票
1 回答
105 浏览

c++ - 在 capnproto RPC 中识别调用者

我正在 CapnProto 中实施一项服务。该服务遵循以下步骤(大致):

  1. 在服务器上进行身份验证
  2. 一旦通过身份验证,就可以通过服务接口(对象能力)进行操作。

我想实现以下目标:

我想要的是,从 doOperation 中,我可以识别正在使用该功能的用户(我想知道她的用户名)。即:

  • 我解决的是已知使用服务功能的用户具有该权限(因为服务是调用登录的结果)

  • 问题是我有很多这样的用户,对于他们中的每一个,我想在第一步中做服务能力的用户和她的登录之间的匹配。

0 投票
2 回答
84 浏览

capnproto - 如何从 java 中的 protobuf.ByteString 获取 MessageReader

在 Java 客户端中,我得到一个

从 C++ 服务器,我想Capnprotobuf.ByteString

@肯顿瓦尔达

0 投票
1 回答
80 浏览

javascript - Cap'n Proto 泛型如何?

对于我的生活,我无法弄清楚如何让它发挥作用。
这是结构

我已经阅读了很多内容来理解这是一个“泛型”结构。

我正在尝试使用 capnp-ts 在打字稿中实现它。

我不知道如何设置地图的“文本”部分。我可以完成 Value,因为这只是 initRoot(mystructs.Value) 的问题,但我没有要使用的“Text”结构,所以我不确定我应该为此创建什么。

任何建议将不胜感激!

0 投票
1 回答
281 浏览

c++ - 在对齐的内存缓冲区中为 capnp FlatArrayMessageReader 接收 zmq 消息

PUB/SUB使用. tcp://_ capnp_ capnp::messageToFlatArray在接收方,我收到一条zmq_msg_t消息中的全部内容。但zmq_msg_data(&message)返回一个未capnp::word对齐的内存位置。FlatArrayMessageReader抛出内存未对齐的异常也是如此。

简化的代码如下所示:

什么是在不复制整个缓冲区的情况下对齐数据的好方法?或者有没有办法在没有性能损失的情况下在字对齐的内存中接收消息 - 比如在 zmq 中禁用零复制?

尝试使用 capnp 版本 0.7.0、zeromq 版本 4.3.2 和 gcc 7.4.0 的 ubuntu 18.04。

0 投票
2 回答
970 浏览

c++ - Cap'n Proto C++ 序列化为字符数组(或任何字节数组)

我的目标是通过 MPI 发送序列化数据。我已经使用 ProtoBuf 完成了此操作,但我想尝试使用更快的序列化方法,例如 Cap'n Proto(我也会尝试其他方法,但在这里我被卡住了)。使用 ProtoBuf,我使用了可以SerializeToArray(void * data, int size)正常工作的函数函数。

现在,我想用 Cap'n Proto 做同样的事情,但我找不到任何地方如何做到这一点(如果你有链接,请发送)。由于 Cap'n Proto 声称是 ProtoBuf 的更快替代品,我对此感到惊讶。也许,我正在以完全错误的方式解决这个问题。

所以我的问题变成了:

如何使用 Cap'n Proto 序列化为 char 数组(或任何字节数组)(如果可能的话)?或者我如何以一种可以使用 C++ 通过 MPI 轻松发送的方式进行序列化?

0 投票
1 回答
97 浏览

capnproto - 是否可以在 Cap'n proto 中使用更多变体扩展标记联合,同时与任何旧数据二进制兼容?

我正在研究协议模式语言,似乎 Cap'n'proto 会满足我的需求,但是我需要一个我在文档中找不到的关键功能:

假设我有这个带有两个结构成员的标记联合,采用类似 C 的语法:

那么我以后可以向标记的联合添加另一个结构,同时仍然能够读取旧数据吗?

感觉它应该是可行的,但我在文档中找不到任何东西说它是可行的。有一个关于在不破坏线路兼容性的情况下可扩展组的注释(旧数据的新字段归零)。

如果可能,我将如何在 cap'n proto 模式语法中声明此更改?一个之前/之后的例子会很棒!