8 个版本

1.0.0-rc.52024年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个直接使用)

BSD-3-Clause

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