Simple, efficient token bucket rate limiter for your proxies.
Supports filters and whitelist exceptions to determine when to apply the rate limiter.
go get -u gopkg.in/vinxi/ratelimit.v0
See godoc reference.
package main
import (
"fmt"
"time"
"gopkg.in/vinxi/ratelimit.v0"
"gopkg.in/vinxi/vinxi.v0"
)
const port = 3100
func main() {
// Create a new vinxi proxy
vs := vinxi.NewServer(vinxi.ServerOptions{Port: port})
// Attach the rate limit middleware for 100 req/min
vs.Use(ratelimit.NewTimeLimiter(time.Minute, 100))
// Target server to forward
vs.Forward("http://httpbin.org")
fmt.Printf("Server listening on port: %d\n", port)
err := vs.Listen()
if err != nil {
fmt.Errorf("Error: %s\n", err)
}
}
package main
import (
"fmt"
"gopkg.in/vinxi/ratelimit.v0"
"gopkg.in/vinxi/vinxi.v0"
"time"
)
const port = 3100
func main() {
// Create a new vinxi proxy
vs := vinxi.NewServer(vinxi.ServerOptions{Port: port})
// Attach the ratelimit middleware for 10 req/second
vs.Use(ratelimit.NewRateLimiter(10, 10))
// Target server to forward
vs.Forward("http://httpbin.org")
fmt.Printf("Server listening on port: %d\n", port)
err := vs.Listen()
if err != nil {
fmt.Errorf("Error: %s\n", err)
}
}
MIT