ripple-api/app/rate_limiter.go

37 lines
565 B
Go
Raw Normal View History

package app
import (
"strconv"
"time"
2017-01-14 17:06:16 +00:00
"zxq.co/ripple/rippleapi/limit"
)
const reqsPerSecond = 5000
const sleepTime = time.Second / reqsPerSecond
var limiter = make(chan struct{}, reqsPerSecond)
func setUpLimiter() {
for i := 0; i < reqsPerSecond; i++ {
limiter <- struct{}{}
}
go func() {
for {
limiter <- struct{}{}
time.Sleep(sleepTime)
}
}()
}
func rateLimiter() {
<-limiter
}
func perUserRequestLimiter(uid int, ip string) {
if uid == 0 {
2017-02-02 10:56:32 +00:00
limit.Request("ip:"+ip, 200)
} else {
2017-02-02 10:56:32 +00:00
limit.Request("user:"+strconv.Itoa(uid), 3000)
}
}