集成第三方异步API和cap'n proto rpc的好方法是什么?

kt06eoxx  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(545)

我有一个处理cap'n proto-rpc请求的linux服务器。其中一些请求需要将请求中的数据转发到另一个运行kafka代理的服务器。librdkafka和cap'n proto kj库都可以使用poll(),因此我认为操作系统将确保它们都可以异步运行,但我不确定是否需要进一步的集成或是否有益。有人有这方面的经验吗?
这个问题比我列出的细节要宽泛一些。。有其他的API,我可能会呼吁在未来从cap'n proto-rpc所以任何广泛的指导方针将不胜感激。

rhfm7lfc

rhfm7lfc1#

不幸的是,这并不是那么简单。是的,它们都使用poll(),但问题是,一次只有一个库调用poll(),而且只有该库实际接收任何事件——另一个被卡住了。对于事件循环库来说,这是一个典型的挑战——默认情况下,它们不能一起使用。
一种选择是尝试在单独的线程中使用这些库。但是,通常事件驱动库的设计都是基于这样的假设,即您在一个线程中执行所有操作,否则为什么需要一个事件循环?
但“正确的做法”是集成事件循环。kj的事件循环能够与其他事件库集成。例如,我为node capnp将其与libuv集成;请参阅此文件的第一部分:
https://github.com/kentonv/node-capnp/blob/master/src/node-capnp/capnp.cc
(在某个时候,我计划将libuv相关的代码分离到cap'nproto附带的一个单独的库中。)
举另一个例子,nathan hourt提出了一个pull请求,请求添加与qt的事件循环的集成——但请注意,这个请求不包括i/o集成,我认为这是因为nathan使用的是 AsyncIoStream 当数据可用时,他手动将其推入:
https://github.com/sandstorm-io/capnproto/pull/253
在任何情况下,无论Kafka用什么,你都需要做类似的事情。希望你能把你的代码贡献给cap'n proto!:)

相关问题