#[derive(Debug, Clone)]
pub struct TransportConfig {
pub connect_timeout_ms: u32,
pub read_timeout_ms: u32,
pub write_timeout_ms: u32,
pub tcp_keepalive: bool,
pub tcp_keepalive_interval_secs: u16,
pub tcp_keepalive_probes: u8,
pub read_buffer_size: usize,
pub write_buffer_size: usize,
}
impl Default for TransportConfig {
fn default() -> Self {
Self {
connect_timeout_ms: 30_000,
read_timeout_ms: 30_000,
write_timeout_ms: 30_000,
tcp_keepalive: true,
tcp_keepalive_interval_secs: 60,
tcp_keepalive_probes: 3,
read_buffer_size: 1024,
write_buffer_size: 1024,
}
}
}
impl TransportConfig {
pub fn low_latency() -> Self {
Self {
connect_timeout_ms: 5_000,
read_timeout_ms: 5_000,
write_timeout_ms: 5_000,
tcp_keepalive: true,
tcp_keepalive_interval_secs: 30,
tcp_keepalive_probes: 3,
read_buffer_size: 512,
write_buffer_size: 512,
}
}
pub fn high_throughput() -> Self {
Self {
connect_timeout_ms: 60_000,
read_timeout_ms: 60_000,
write_timeout_ms: 60_000,
tcp_keepalive: true,
tcp_keepalive_interval_secs: 120,
tcp_keepalive_probes: 5,
read_buffer_size: 4096,
write_buffer_size: 4096,
}
}
}
#[derive(Debug, Clone)]
pub struct ReconnectConfig {
pub enabled: bool,
pub max_attempts: u32,
pub initial_interval_ms: u32,
pub max_interval_ms: u32,
pub backoff_multiplier: f32,
pub enable_jitter: bool,
}
impl Default for ReconnectConfig {
fn default() -> Self {
Self {
enabled: true,
max_attempts: 0, initial_interval_ms: 1_000,
max_interval_ms: 60_000,
backoff_multiplier: 2.0,
enable_jitter: true,
}
}
}
impl ReconnectConfig {
pub fn disabled() -> Self {
Self {
enabled: false,
..Default::default()
}
}
pub fn simple(interval_ms: u32, max_attempts: u32) -> Self {
Self {
enabled: true,
max_attempts,
initial_interval_ms: interval_ms,
max_interval_ms: interval_ms,
backoff_multiplier: 1.0,
enable_jitter: false,
}
}
pub fn exponential_backoff(
initial_ms: u32,
max_ms: u32,
multiplier: f32,
max_attempts: u32,
) -> Self {
Self {
enabled: true,
max_attempts,
initial_interval_ms: initial_ms,
max_interval_ms: max_ms,
backoff_multiplier: multiplier,
enable_jitter: true,
}
}
}