add rate limiter

This commit is contained in:
ginuerzh
2022-09-05 22:47:51 +08:00
parent e23da0f319
commit 4c2131ca6d
40 changed files with 1622 additions and 135 deletions

30
limiter/limiter.go Normal file
View File

@ -0,0 +1,30 @@
package limiter
import (
"context"
"github.com/go-gost/core/limiter"
"golang.org/x/time/rate"
)
type llimiter struct {
limiter *rate.Limiter
}
func NewLimiter(r int) limiter.Limiter {
return &llimiter{
limiter: rate.NewLimiter(rate.Limit(r), r),
}
}
func (l *llimiter) Wait(ctx context.Context, n int) int {
if l.limiter.Burst() < n {
n = l.limiter.Burst()
}
l.limiter.WaitN(ctx, n)
return n
}
func (l *llimiter) Limit() int {
return l.limiter.Burst()
}