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