pub struct TokenBucket { /* private fields */ }Expand description
Rate limiter that caps the number of tokens consumed per second.
Used on ClientHandle to throttle how many fan-out voice
frames a single client can absorb per second, so one slow or
adversarial client can’t monopolize the reflector’s fan-out
loop. Classic leaky/token-bucket hybrid: the bucket starts full
and Self::try_consume refills by refill_rate_per_sec * elapsed tokens (capped at max_tokens) before attempting to
withdraw.
This is a sans-io state machine: Self::try_consume takes
the caller’s current Instant and never calls
Instant::now itself. Tests drive the clock forward by
constructing synthetic instants.
Implementations§
Source§impl TokenBucket
impl TokenBucket
Sourcepub fn new(max_tokens: u32, refill_rate_per_sec: f64, now: Instant) -> Self
pub fn new(max_tokens: u32, refill_rate_per_sec: f64, now: Instant) -> Self
Construct a new bucket full of tokens.
max_tokens: burst capacity; the bucket starts with this many tokens and refills up to (but never beyond) this value.refill_rate_per_sec: steady-state refill rate in tokens per second. A nominal 20 fps D-STAR voice stream would set this to60.0(3× nominal) to leave headroom for jitter.now: the wall-clock instant at which the bucket is constructed, used as the seed for the first refill delta.
Sourcepub fn try_consume(&mut self, now: Instant, tokens: u32) -> bool
pub fn try_consume(&mut self, now: Instant, tokens: u32) -> bool
Attempt to withdraw tokens from the bucket at time now.
Returns true if the bucket had enough tokens (withdrawal
committed); returns false otherwise.
Sourcepub const fn tokens(&self) -> f64
pub const fn tokens(&self) -> f64
Current (refill-approximated) token count, for tests/metrics.
Sourcepub const fn max_tokens(&self) -> f64
pub const fn max_tokens(&self) -> f64
Maximum tokens the bucket can hold.
Sourcepub const fn refill_rate_per_sec(&self) -> f64
pub const fn refill_rate_per_sec(&self) -> f64
Refill rate in tokens per second.
Trait Implementations§
Source§impl Clone for TokenBucket
impl Clone for TokenBucket
Source§fn clone(&self) -> TokenBucket
fn clone(&self) -> TokenBucket
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more