12 个版本

0.5.0 2024年7月31日
0.4.6 2024年5月28日
0.4.4 2024年4月28日
0.4.2 2024年3月13日
0.3.0 2024年1月11日

#268 in 网络编程

Download history 121/week @ 2024-04-19 220/week @ 2024-04-26 8/week @ 2024-05-03 182/week @ 2024-05-10 51/week @ 2024-05-17 185/week @ 2024-05-24 66/week @ 2024-05-31 9/week @ 2024-06-07 8/week @ 2024-06-14 32/week @ 2024-06-21 14/week @ 2024-06-28 5/week @ 2024-07-05 26/week @ 2024-07-12 2/week @ 2024-07-19 133/week @ 2024-07-26 24/week @ 2024-08-02

每月186次下载

MIT/Apache

135KB
3K SLoC

monoio-transports

monoio-transports 是一个基于 monoio 异步运行时构建的高性能、模块化网络库。它提供了一套连接器和实用工具,用于高效的网络通信,针对 io_uring 进行优化。

主要功能

  • 模块化和可堆叠的连接器架构
  • 支持各种传输层(TCP、Unix 域套接字)
  • 支持 TLS 以实现安全通信
  • 支持 HTTP/1.1 和 HTTP/2 协议
  • 高级连接池以实现最佳性能
  • 针对 monoio 的异步运行时和 io_uring 优化
  • 具有内置连接重用的高性能客户端实现

核心概念

连接器特质

Connector 特质是这个 crate 模块化架构的基础。它定义了建立网络连接的公共接口

pub trait Connector<K> {
    type Connection;
    type Error;
    fn connect(&self, key: K) -> impl Future<Output = Result<Self::Connection, Self::Error>>;
}

此特质允许创建各种连接器类型,可以轻松组合和堆叠以创建复杂的连接设置。

传输连接元数据特质

TransportConnMetadata 特质提供了一种检索有关连接的额外信息的方法,例如 ALPN(应用层协议协商)细节

pub trait TransportConnMetadata {
    type Metadata;
    fn get_conn_metadata(&self) -> Self::Metadata;
}

连接器类型

L4 连接器

  • TcpConnector:建立 TCP 连接
  • UnixConnector:建立 Unix 域套接字连接
  • UnifiedL4Connector:支持 TCP 和 Unix 域套接字的统一连接器

TLS 连接器

TlsConnector 为底层 L4 连接器添加 TLS 加密,支持 native-tls 和 rustls 后端。

HTTP 连接器

HttpConnector 是一个支持 HTTP/1.1 和 HTTP/2 协议的通用连接器。它可以与各种底层连接器(TCP、Unix、TLS)一起使用,并提供了内置的连接池以实现高效的资源使用和高性能。

连接池

该库提供了一个通用、灵活的连接池实现,可以与任何类型的连接一起使用。

  • ConnectionPool:一个通用的池,可以管理和重用任何类型的连接。
  • PooledConnector:一个包装器,可以为任何连接器添加池化功能。

此通用池化系统目前被用于

  • HttpConnector:利用连接池为HTTP/1.1和HTTP/2提供支持。
  • Hyper连接器(当启用hyper功能时):利用池化系统,以与Hyper生态系统兼容的方式高效地重用连接。

此池化实现的灵活性允许开发者轻松地将连接重用功能添加到自定义连接器或任何其他连接类型。这导致高性能客户端能够高效地管理连接,显著提高各种协议和连接类型在高负载场景下的吞吐量和降低延迟。

堆叠连接器

连接器可以轻松堆叠以创建强大、灵活的连接设置。例如

use monoio_transports::{
    connectors::{TcpConnector, TlsConnector},
    HttpConnector,
};

// Simple TCP conenctor
let tcp_connector = TcpConnector::default();
// TLS conencttor with custom ALPN protocols set
let tls_connector = TlsConnector::new_with_tls_default(tcp_connector, Some(vec!["http/1.1"]));
// Https conector with HTTP_2 and HTTP_11 support.
let https_connector: HttpConnector<TlsConnector<TcpConnector>, _, _> = HttpConnector::default();

此示例创建了一个连接器堆栈,使用TCP作为基础连接,添加TLS加密,然后在上面提供具有内置连接池的HTTP协议处理。

功能标志

  • native-tls:启用TLS连接的native-tls后端
  • hyper:启用与Hyper HTTP库的集成,包括具有高效连接池的Hyper兼容连接器

通过利用monoio的高效异步运行时、io_uring和高级连接池,monoio-transports为构建高性能网络应用程序和HTTP客户端提供了一个强大且灵活的工具包。

依赖关系

~21–33MB
~514K SLoC