limit_rate.go 440 B

1234567891011121314151617181920212223
  1. package sessdata
  2. import (
  3. "context"
  4. "golang.org/x/time/rate"
  5. )
  6. type LimitRater struct {
  7. limit *rate.Limiter
  8. }
  9. // lim: 令牌产生速率
  10. // burst: 允许的最大爆发速率
  11. func NewLimitRater(lim, burst int) *LimitRater {
  12. limit := rate.NewLimiter(rate.Limit(lim), burst)
  13. return &LimitRater{limit: limit}
  14. }
  15. // bt 不能超过burst大小
  16. func (l *LimitRater) Wait(bt int) error {
  17. return l.limit.WaitN(context.Background(), bt)
  18. }