问题标签 [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.
linux - kj AsyncIoStream 中损坏的网络写入
我正在Cap'n Proto的优秀kj-async 库上实现一个网络应用程序。
argv[1]
下面的示例代码通过 TCP提供一个(大的、预加载的)文件 ( )。如果我将它直接重定向到带有nc localhost 9004 > test
的文件,则可以正确检索该文件。
如果我让文件输出到终端而不重定向到文件,我会看到间歇性损坏。我怀疑当终端无法足够快地写入输出时,底层调用::write
失败EAGAIN
,并且下一次调用以某种方式使用了不正确的偏移量。EWOULDBLOCK
当我尝试通过 wifi 获取它时,这更可靠地重现。
我认为我必须对对象生命周期有一些问题,但是 valgrind 没有任何提示。
我使用了 angular.min.js但任何不太小的文件都为我重现了这个问题
我在 64 位 Linux 4.1.6 (Arch) 上使用来自 git 的 libkj
编译并运行:
要求:
c++ - 保护 Cap'n Proto RPC 网络流量的好方法是什么?
我想使用 Cap'n Proto RPC 从办公室的桌面盒与云中的服务器进行通信。Cap'n Proto 不提供通过防火墙的安全网络连接。我更喜欢 c++,因为我有其他需要这个的组件。
我看到有些人一直在研究 nanomsg 和其他直接链接到应用程序的传输,但我想知道 stunnel 或类似的东西是否令人满意。
众所周知,stunnel 应用程序可以在某些条件下提供 TCP/IP 流量的 HTTPS 封装,根据常见问题解答:
- 协议是 TCP,而不是 UDP。
- 该协议不使用多个连接,例如 ftp。
- 该协议不依赖于带外 (OOB) 数据,
- 远程站点不能使用特定于应用程序的协议,例如 ssltelnet,其中 SSL 是一个协商选项,除了 stunnel 的协议参数已经支持的那些协议。
Cap'n Proto RPC 似乎可以满足这些条件。在这种情况下,我认为客户不会反对安装 stunnel。有没有人尝试过这个或类似的东西?如果是这样,您的经验将不胜感激。如果有人知道更快/更轻的替代方案,它也会有所帮助。
谢谢!
c++ - 将 3rd 方异步 API 与 Cap'n Proto RPC 集成的好方法是什么?
我有一个处理 Cap'n Proto RPC 请求的 Linux 服务器。其中一些请求需要将请求中的数据转发到正在运行的另一台服务器,在本例中为 Kafka 代理。librdkafka 和 Cap'n Proto KJ 库都可以使用 poll() 所以我认为操作系统将确保它们都可以异步运行,但我不确定是否需要进一步集成或是否有益。这个事情谁有经验?
这个问题比我列出的细节要广泛一些。我将来可能会从 Cap'n Proto RPC 调用其他 API,因此将不胜感激。
c++ - 为 Capn Pronto 和 Snappy 链接 C++ 库
我正在尝试编译一个 c++ 项目,它需要 capn pronto 和 snappy。我已经安装了这些使用:
但我认为我现在需要链接这些库,因为当我尝试编译我的项目时出现以下错误:
kj 是 Capn Pronto 中包含的一个库。我尝试在制作时使用命令 -lkj 链接它,但这不起作用。
c++ - 需要 libsnappy 的 C++ 程序
我正在尝试制作和构建一个需要 libsnappy 和 Capn Proto的 C++ 程序(可在此处获取https://github.com/mortehu/text-classifier )。我相信我在运行以下命令后遇到了 libsnappy 问题:
我收到错误“base/columnfile.cc:7:10: fatal error: 'snappy.h' file not found”
我曾尝试在 make 阶段链接与 libsnappy 相关的各种文件夹,但无济于事。我还尝试以几种不同的方式安装 snappy,例如:
和
但我也不确定图书馆的保存位置。理想情况下,我可以找到包含“snappy.h”的文件夹,并且可以在制作阶段链接它。任何有关我出错的地方的帮助将不胜感激,谢谢。
rust - capnpc::compile 不写文件
我在使用capnpc crate时遇到了困难。我正在运行 Arch Linux 并从 AUR 安装 capnp 并从 github 项目编译 capnpc-rust 并将其放入/usr/local/bin
. 我可以使用命令轻松手动编译 .capnp 文件
我尝试克隆 capnpc 项目并在测试目录中编译 .capnp 测试文件,但这也不起作用。我没有收到任何错误(而之前我收到“找不到文件”)所以看起来 capnpc 正在工作,但我无法在任何地方找到文件。
构建.rs
货运.toml
编辑:.rs 文件构建到 /target/debug/build/.../out。
c++ - 使用 Cap'n'Proto 序列化时流式传输
考虑这样的 Cap'n'Proto 模式:
现在我想序列化(即构建)一个文档实例并将其流式传输到远程目标。
由于文档通常非常大,我不想在发送之前将其完全构建在内存中。相反,我正在寻找一个通过网络直接发送结构的构建器。这样额外需要的内存缓冲区是恒定的(即 O(max(sizeof(Header), sizeof(Record), sizeof(Footer))))。
查看教程材料,我没有找到这样的构建器。MallocMessageBuilder
似乎首先在内存中创建所有内容(然后您调用它writeMessageToFd
)。
Cap'n'Proto API 是否支持这样的用例?
还是 Cap'n'Proto 更适合用于在发送前放入内存的消息?
在此示例中,可以省略 Document 结构,然后可以只发送一个 Header 消息、n 个 Record 消息和一个 Footer 的序列。由于 Cap'n'Proto 消息是自定界的,因此应该可以。但是你失去了你的文档根——也许有时这不是一个真正的选择。
binaryfiles - 是否有现成的二进制格式允许字符串缓存
我正在研究将高度定制且高效的二进制格式迁移到一种可用的二进制格式。数据存储在其他地方的一些低功率移动设备上,因此性能是重要的要求。当前格式的优点是所有字符串都存储在一个池中。这意味着我们不会在文件中重复相同的字符串数百次,我们在反序列化期间只读取一次,并且所有对象都通过其索引引用它。这也意味着我们在内存中只保留一份副本。所以有很多优点:) 我无法找到一种方法让 capnproto 或 flatbuffers 支持这一点。或者我是否需要在顶部构建层,并在生成的对象中明确使用整数索引来字符串?
谢谢!
java - 带有 capnproto 的 Java RPC 库?
目前 capnproto uber-fast 库不提供 RPC 库,这使得替换现有的 GRPCio(或其他 RPC java 框架)变得困难。为什么 capnproto Java 支持目前仅限于序列化?是否也有计划支持完整的 RPC 框架?
c++ - Cap'n Proto:将大消息分段写入磁盘
我想创建一个巨大的打包数据数组,并将其保存在磁盘上。我正在使用 writePackedMessageToFd()。但是,由于输入数据如此之大(50GB),我需要将消息片段存储到磁盘以释放内存。
当前版本的 Cap'n Proto 可以做到这一点吗?
旁注:这个问题与提到的重复问题不同,因为输出不需要流式传输,例如理论上可能有其他选项,例如在第一遍中保存整个(未完成)消息的增长文件。第二遍可以完成消息。