8 个版本
1.0.0-rc.5 | 2024年2月12日 |
---|---|
0.8.1 | 2021年1月29日 |
0.2.7 | 2020年10月12日 |
0.2.6 | 2020年9月18日 |
0.0.7 | 2020年1月15日 |
#2161 in 神奇豆子
26 每月下载量
用于 5 个crate(4个直接使用)
66KB
986 行
塔里服务框架
lib.rs
:
服务框架
此模块包含异步服务的构建块。
它包含以下模块
初始化器
此模块包含 ServiceInitializer trait。服务模块应实现此trait并将其实现传递给 StackBuilder。
堆栈
包含负责收集和'执行' ServiceInitializer 实现的 StackBuilder。
处理程序
一组用于在服务之间收集和共享句柄的实用程序。负责初始化 StackBuilder 和将其提供给 ServiceInitializer 实现的 ServiceHandlesFuture。
句柄只是与对应服务进行通信的一种方式。通常,会使用 SenderService 来实现这一目的,但实现者可以根据自己的需要以任何方式实现句柄。
reply_channel
这允许将查询消息发送到服务,并附带一个“回复通道”,以便服务发送结果。使用 reply_channel::unbounded
函数创建一个发送/接收对。发送者实现了 tower_service::Service
,可以用于发出请求。接收者实现了 futures::Stream
,并将提供包含 oneshot
回复通道的 RequestContext
对象,服务可以使用此通道回复调用者。
示例
reply_channel
use tari_service_framework::{reply_channel, tower::ServiceExt};
block_on(async {
let (mut sender, mut receiver) = reply_channel::unbounded();
let (result, _) = futures::join!(
// Make the request and make progress on the resulting future
sender.call_ready("upper"),
// At the same time receive the request and reply
async move {
let req_context = receiver.next().await.unwrap();
let msg = req_context.request().clone();
req_context.reply(msg.to_uppercase());
}
);
assert_eq!(result.unwrap(), "UPPER");
});
依赖关系
~3–5MB
~83K SLoC