1个不稳定版本

0.1.0 2023年3月27日

异步 中排名第 974

Download history · Rust 包仓库 442/week @ 2024-03-14 · Rust 包仓库 788/week @ 2024-03-21 · Rust 包仓库 893/week @ 2024-03-28 · Rust 包仓库 1700/week @ 2024-04-04 · Rust 包仓库 1714/week @ 2024-04-11 · Rust 包仓库 517/week @ 2024-04-18 · Rust 包仓库 767/week @ 2024-04-25 · Rust 包仓库 370/week @ 2024-05-02 · Rust 包仓库 434/week @ 2024-05-09 · Rust 包仓库 231/week @ 2024-05-16 · Rust 包仓库 455/week @ 2024-05-23 · Rust 包仓库 464/week @ 2024-05-30 · Rust 包仓库 460/week @ 2024-06-06 · Rust 包仓库 460/week @ 2024-06-13 · Rust 包仓库 322/week @ 2024-06-20 · Rust 包仓库 266/week @ 2024-06-27 · Rust 包仓库

每月下载量 1,579

MIT/Apache

13KB
238

由异步actor支持的 tower::Service

tower::Service trait 非常灵活,允许编写各种可组合的中间件。然而,现有中间件中存在一个缺口,即在以请求/响应为导向的 Service 接口和类似actor的状态actor处理接收消息队列的模型之间进行桥接。

Tower使用actor模型,通过将 Service 放入一个从 mpsc 拉取请求消息的工作任务中,并以 Buffer 处理程序的形式来调解对共享 Service 的访问。这几乎是我们想要的,除了 Buffer 只能包装一个 Service 实现,而 Service trait 并非我们想要的:虽然 Service trait 的 call 方法允许通过 &mut self)进行 同步 状态修改,但它与 异步 状态修改不太兼容(因为所有异步工作都必须在响应future中进行,而响应future无法访问 Service 状态,除非进行额外的共享和同步设置)。

因此,在Penumbra的 pd 中,我们最终将 Buffer 中间件进行了供应商和分叉,并使用分叉代码来包装我们为 tower-abci 提供的共识和mempool服务的硬编码工作线程。为了使其更通用,我们将它提取到这个crate中。

依赖关系

~4–11MB
~109K SLoC