22 个版本
0.5.0 | 2024 年 8 月 13 日 |
---|---|
0.4.13 | 2022 年 6 月 17 日 |
0.4.12 | 2022 年 2 月 16 日 |
0.4.11 | 2021 年 11 月 18 日 |
0.0.1 | 2016 年 12 月 23 日 |
#1 in 网络编程
5,037,700 每月下载量
用于 5,567 个包 (784 直接使用)
410KB
7K SLoC
塔楼
Tower 是一个模块化和可重用的组件库,用于构建健壮的客户端和服务器。
概述
Tower 致力于使构建健壮的客户端和服务器尽可能简单。它是协议无关的,但围绕请求/响应模式设计。如果您的协议完全是基于流的,那么 Tower 可能不是最佳选择。
Tower 提供了一个简单的核心抽象,即 Service
特性,它代表一个异步函数,该函数接收一个请求并返回响应或错误。这个抽象可以用来模拟客户端和服务器。
通用组件,如 超时、速率限制 和 负载均衡,可以建模为 Service
,该特性封装内部服务并在调用内部服务之前或之后应用额外的行为。这允许以协议无关、可组合的方式实现这些组件。通常,这样的服务被称为 中间件。
增加了一个抽象,即Layer
特质,用于将中间件与Service
组合。如果可以将Service
视为一个从请求类型到响应类型的异步函数,那么Layer
就是一个接受一种类型的Service
并返回另一种类型的Service
的函数。使用ServiceBuilder
类型可以通过组合多个Layer
来将中间件添加到服务中。
塔生态系统
塔由以下库组成
由于Service
和Layer
特质是所有使用塔的库的重要集成点,因此它们尽可能保持稳定,且很少进行破坏性更改。因此,它们被定义在独立的库中,分别是tower-service
和tower-layer
。此库包含这些核心特质的重导出、常用中间件的实现以及用于处理Service
和Layer
的实用工具。最后,tower-test
库为使用塔的程序提供测试工具。
使用方法
塔提供了一层抽象,以及各种中间件的泛型实现。这意味着仅凭tower
库本身并不提供网络客户端或服务器的实际实现。相反,塔的Service
特质提供了一个集成点,连接应用程序代码、提供中间件实现的库以及实现各种网络协议的客户端和/或服务器的库。
根据您的具体用例,您可能以以下几种方式使用塔
-
实现网络程序的逻辑。您可以使用
Service
特质来模拟应用程序的行为,并使用此库和其他库提供的中间件为协议实现提供的客户端和服务器添加功能。 -
实现中间件以以可重用的方式向网络客户端和服务器添加自定义行为。这可能是一般用途的中间件(如果是的话,请考虑将其作为库发布,以供其他塔用户使用!)或需要在多个客户端或服务器之间共享的应用程序特定行为。
-
实现网络协议。实现网络协议(如HTTP)的库可以依赖于
tower-service
使用Service
特性作为协议和用户代码之间的集成点。例如,某个协议的客户端可能实现Service
,允许用户向这些客户端添加任意Tower中间件。同样,服务器也可能由用户提供的Service
创建。此外,当网络协议需要现有Tower中间件已提供的功能时,协议实现可能内部使用Tower中间件,以及一个集成点。
库支持
许多第三方库支持Tower和 Service
特性。以下是一个此类库的不完整列表
hyper
:一个快速且正确的底层HTTP实现。tonic
:基于hyper
的 gRPC-over-HTTP/2 实现。请参阅 此处 了解使用tonic
与Tower的示例。axum
:使用Tokio、Tower和Hyper构建的舒适和模块化Web框架。tower-lsp
:基于Tower的 语言服务器协议 实现。kube
:Kubernetes客户端和futures控制器运行时。kube::Client
使用Tower生态系统:tower
、tower-http
和tower-test
。请参阅 此处 和 此处 了解使用kube
与Tower的示例。
如果您是支持Tower的crate的维护者,我们很高兴将您的crate添加到这个列表中!请 提交一个PR,添加您库的简要描述!
入门指南
此crate提供的各种中间件实现都带有功能标记,以便用户只能编译Tower所需的部分。默认情况下,所有可选中间件都未启用。
要开始使用Tower的所有可选中间件,将以下内容添加到您的 Cargo.toml
tower = { version = "0.5.0", features = ["full"] }
或者,您可以选择启用某些功能。例如,要仅启用 retry
和 timeout
中间件,请编写
tower = { version = "0.5.0", features = ["retry", "timeout"] }
请参阅 此处 了解Tower提供的所有中间件的完整列表。
支持的Rust版本
Tower将保持至少6个月的滚动MSRV(最低支持Rust版本)策略。当提高MSRV时,新的Rust版本必须在至少六个月前发布。当前的MSRV是1.64.0。
许可证
本项目遵循MIT许可证。
贡献
除非你明确声明,否则你有意向提交给Tower的任何贡献,均应按MIT许可证进行许可,不附加任何额外条款或条件。
依赖项
~0–1.8MB
~31K SLoC