nuclearace / SwiftRateLimiter

Token Bucket based rate limiter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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.

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.

About

Token Bucket based rate limiter


Languages

Language:Swift 100.0%