|
Network System 0.1.1
High-performance modular networking library for scalable client-server applications
|
Token bucket rate limiter. More...
#include <rate_limiter.h>

Classes | |
| struct | bucket |
Public Member Functions | |
| rate_limiter (rate_limiter_config config={}) | |
| Construct rate limiter with configuration. | |
| bool | allow (std::string_view client_id) |
| Check if request should be allowed. | |
| bool | allow (std::string_view client_id, std::string_view session_id) |
| Check if request should be allowed (session-aware) | |
| bool | would_allow (std::string_view client_id) const |
| Check if request would be allowed (without consuming token) | |
| double | remaining_tokens (std::string_view client_id) const |
| Get remaining tokens for a client. | |
| void | reset (std::string_view client_id) |
| Reset rate limit for a specific client. | |
| void | reset_all () |
| Reset all rate limits. | |
| size_t | client_count () const |
| Get number of tracked clients. | |
| void | set_config (rate_limiter_config config) |
| Update configuration. | |
| rate_limiter_config | config () const |
| Get current configuration. | |
Private Member Functions | |
| void | maybe_cleanup (std::chrono::steady_clock::time_point now) |
Private Attributes | |
| rate_limiter_config | config_ |
| std::shared_mutex | mutex_ |
| std::unordered_map< std::string, bucket > | buckets_ |
| std::chrono::steady_clock::time_point | last_cleanup_ |
Token bucket rate limiter.
Implements a token bucket algorithm for rate limiting. Each client is identified by a string key (typically IP address).
This class is thread-safe. All public methods can be called from multiple threads concurrently.
Definition at line 82 of file rate_limiter.h.
|
inlineexplicit |
Construct rate limiter with configuration.
| config | Rate limiter configuration |
Definition at line 88 of file rate_limiter.h.
|
inlinenodiscard |
Check if request should be allowed.
| client_id | Client identifier (e.g., IP address) |
Definition at line 98 of file rate_limiter.h.
References kcenon::network::rate_limiter_config::auto_cleanup, buckets_, kcenon::network::rate_limiter_config::burst_size, config_, kcenon::network::rate_limiter::bucket::last_refill, kcenon::network::rate_limiter_config::max_requests_per_second, maybe_cleanup(), mutex_, and kcenon::network::rate_limiter::bucket::tokens.
Referenced by allow().


|
inlinenodiscard |
Check if request should be allowed (session-aware)
| client_id | Client identifier (e.g., IP address) |
| session_id | Session identifier for per-session rate limiting |
When session_id is non-empty, a composite key "client_id:session_id" is used, enabling per-session rate limiting. When session_id is empty, falls back to client_id-only behavior.
Definition at line 149 of file rate_limiter.h.
References allow().

|
inlinenodiscard |
Get number of tracked clients.
Definition at line 236 of file rate_limiter.h.
|
inlinenodiscard |
Get current configuration.
Definition at line 254 of file rate_limiter.h.
References config_, and mutex_.
Referenced by set_config().

|
inlineprivate |
Definition at line 265 of file rate_limiter.h.
References buckets_, config_, last_cleanup_, and kcenon::network::rate_limiter_config::stale_timeout.
Referenced by allow().

|
inlinenodiscard |
Get remaining tokens for a client.
| client_id | Client identifier |
Definition at line 195 of file rate_limiter.h.
References buckets_, kcenon::network::rate_limiter_config::burst_size, config_, kcenon::network::rate_limiter_config::max_requests_per_second, and mutex_.
|
inline |
Reset rate limit for a specific client.
| client_id | Client identifier |
Definition at line 219 of file rate_limiter.h.
|
inline |
Reset all rate limits.
Definition at line 227 of file rate_limiter.h.
|
inline |
Update configuration.
| config | New configuration |
Definition at line 245 of file rate_limiter.h.
References config(), config_, and mutex_.

|
inlinenodiscard |
Check if request would be allowed (without consuming token)
| client_id | Client identifier |
Definition at line 167 of file rate_limiter.h.
References buckets_, kcenon::network::rate_limiter_config::burst_size, config_, kcenon::network::rate_limiter_config::max_requests_per_second, and mutex_.
|
private |
Definition at line 291 of file rate_limiter.h.
Referenced by allow(), client_count(), maybe_cleanup(), remaining_tokens(), reset(), reset_all(), and would_allow().
|
private |
Definition at line 289 of file rate_limiter.h.
Referenced by allow(), config(), maybe_cleanup(), remaining_tokens(), set_config(), and would_allow().
|
private |
Definition at line 292 of file rate_limiter.h.
Referenced by maybe_cleanup().
|
mutableprivate |
Definition at line 290 of file rate_limiter.h.
Referenced by allow(), client_count(), config(), remaining_tokens(), reset(), reset_all(), set_config(), and would_allow().