add more options for grpc

This commit is contained in:
ginuerzh
2022-12-21 18:17:46 +08:00
parent 86acbf7f66
commit ee2c05494c
12 changed files with 254 additions and 93 deletions

View File

@ -1,6 +1,7 @@
package rate
import (
"sort"
"time"
limiter "github.com/go-gost/core/limiter/rate"
@ -24,3 +25,32 @@ func (l *rlimiter) Allow(n int) bool {
func (l *rlimiter) Limit() float64 {
return float64(l.limiter.Limit())
}
type limiterGroup struct {
limiters []limiter.Limiter
}
func newLimiterGroup(limiters ...limiter.Limiter) *limiterGroup {
sort.Slice(limiters, func(i, j int) bool {
return limiters[i].Limit() < limiters[j].Limit()
})
return &limiterGroup{limiters: limiters}
}
func (l *limiterGroup) Allow(n int) (b bool) {
b = true
for i := range l.limiters {
if v := l.limiters[i].Allow(n); !v {
b = false
}
}
return
}
func (l *limiterGroup) Limit() float64 {
if len(l.limiters) == 0 {
return 0
}
return l.limiters[0].Limit()
}