https://github.com/nuclearace/swiftratelimiter
Token Bucket based rate limiter
https://github.com/nuclearace/swiftratelimiter
Last synced: about 1 year ago
JSON representation
Token Bucket based rate limiter
- Host: GitHub
- URL: https://github.com/nuclearace/swiftratelimiter
- Owner: nuclearace
- Created: 2014-11-16T23:46:38.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2019-12-01T15:42:12.000Z (over 6 years ago)
- Last Synced: 2023-08-06T02:20:04.064Z (almost 3 years ago)
- Language: Swift
- Size: 14.6 KB
- Stars: 7
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
SwiftRateLimiter
================
Token Bucket based rate limiter
Use removeTokens to queue rate limited functions.
If there are not enough tokens in the bucket to fulfill the request, it will dispatch the callback when there are enough. Alternatively, if you create the rate limiter with the optional parameter `firesImmediatly` eg. `let rl = RateLimiter(tokensPerInterval: 10, interval: "second", firesImmediatly: true)` it will instead execute callbacks immediately.
```swift
let rl = RateLimiter(tokensPerInterval: 10, interval: .second)
// Using trailing closures
rl.removeTokens(5) {err, tokensRemaining in
println("Should do first rate limit")
println(tokensRemaining!)
}
// Callback will execute after 1 seconds
rl.removeTokens(9) {err, tokensRemaining in
println("Should do second rate limit")
println(tokensRemaining!)
}
// Error, requesting more tokens than the bucket can contain
rl.removeTokens(11) {err, tokensRemaining in
println(err)
}
// A token bucket
let tb = TokenBucket(sizeOfBucket: 10, tokensPerInterval: 1, interval: .second)
tb.removeToken(10) {err, tokensRemaining in
println(tokensRemaining)
}
// Bucket is drained
// Callback will execute after 2 seconds seconds
tb.removeToken(2) {err, tokensRemaining in
println(tokensRemaining)
}
// Callback will execute after 12 seconds seconds
tb.removeToken(10) {err, tokensRemaining in
println(tokensRemaining!)
}
```
To install just copy the SwiftRateLimiter folder to your project.