Connectors
Connector Trait
The core of the monoio-transports crate is its modular and composable connector architecture, which allows developers to easily build complex, high-performance network communication solutions.
At the heart of this design is the Connector trait, which defines a common interface for establishing network connections:
pub trait Connector<K> {
type Connection;
type Error;
fn connect(&self, key: K) -> impl Future<Output = Result<Self::Connection, Self::Error>>;
}
Stacking Connectors
Connectors can be easily composed and stacked to create complex connection setups. For example, let’s say you want to create an HTTPS connector that supports both HTTP/1.1 and HTTP/2 protocol
use monoio_transports::{
connectors::{TcpConnector, TlsConnector},
HttpConnector,
};
// Create a TCP connector
let tcp_connector = TcpConnector::default();
// Create a TLS connector on top of the TCP connector, with custom ALPN protocols
let tls_connector = TlsConnector::new_with_tls_default(tcp_connector, Some(vec!["http/1.1", "h2"]));
// Create an HTTP connector on top of the TLS connector, supporting both HTTP/1.1 and HTTP/2
let https_connector: HttpConnector<TlsConnector<TcpConnector>, _, _> = HttpConnector::default();
In this example, we start with a basic TcpConnector, add a TlsConnector on top of it to provide TLS encryption, and then wrap the whole stack with an HttpConnector to handle both HTTP/1.1 and HTTP/2 protocols. This modular approach allows you to easily customize the connector stack to suit your specific needs.
Connector Types
The monoio-transports crate provides several pre-built connector types that you can use as building blocks for your own solutions. Here’s a table outlining the available connectors:
Connector Type | Description |
---|---|
TcpConnector | Establishes TCP connections |
UnixConnector | Establishes Unix domain socket connections |
TlsConnector | Adds TLS encryption to an underlying L4 connector, supporting both native-tls and rustls backends |
HttpConnector | Handles HTTP protocol negotiation and connection setup |
PooledConnector | Provides connection pooling capabilities for any underlying connector |