1个不稳定版本
0.1.0 | 2023年3月27日 |
---|
在 异步 中排名第 974
每月下载量 1,579
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