Skip to main content

Module rate_limiter

Module rate_limiter 

Source
Expand description

Connection rate limiting for preventing connection storms and resource exhaustion.

This module provides sophisticated rate limiting capabilities to control the rate of connection establishment, preventing connection storms, respecting peer limits, and protecting against resource exhaustion.

§Features

  • Token Bucket Algorithm: Classic token bucket with configurable rate and burst
  • Per-Peer Limits: Individual rate limits for each peer
  • Global Limits: System-wide connection rate limits
  • Priority-based Limiting: Different limits for different priority levels
  • Adaptive Rate Limiting: Adjust rates based on success/failure patterns
  • Backpressure Support: Queue connections when rate limit is exceeded

§Example

use ipfrs_network::rate_limiter::{ConnectionRateLimiter, RateLimiterConfig};
use std::time::Duration;

// Create rate limiter allowing 10 connections per second with burst of 20
let mut limiter = ConnectionRateLimiter::new(RateLimiterConfig {
    max_rate: 10.0,
    burst_size: 20,
    enable_per_peer_limits: true,
    ..Default::default()
});

// Check if connection is allowed
let peer_id = "QmExample".to_string();
if limiter.allow_connection(&peer_id).await {
    println!("Connection allowed");
    // Establish connection...
} else {
    println!("Rate limit exceeded, queuing...");
}

Re-exports§

pub use types::*;
pub use types_7::*;

Modules§

atomictokenbucket_traits
AtomicTokenBucket - Trait Implementations
backpressurecontroller_traits
BackpressureController - Trait Implementations
constants
Auto-generated module
peerratelimiterconfig_traits
PeerRateLimiterConfig - Trait Implementations
ratelimiter_traits
RateLimiter - Trait Implementations
ratelimiterconfig_traits
RateLimiterConfig - Trait Implementations
types
Auto-generated module
types_7
Auto-generated module