add conn limiter

This commit is contained in:
ginuerzh 2022-09-14 00:14:20 +08:00
parent e7a104651a
commit 45b7ac2021
4 changed files with 34 additions and 16 deletions

View File

@ -11,7 +11,7 @@ import (
) )
const ( const (
DefaultTimeout = 15 * time.Second DefaultTimeout = 10 * time.Second
) )
var ( var (

10
limiter/conn/limiter.go Normal file
View File

@ -0,0 +1,10 @@
package conn
type Limiter interface {
Allow(n int) bool
Limit() int
}
type ConnLimiter interface {
Limiter(key string) Limiter
}

View File

@ -1,4 +1,4 @@
package limiter package traffic
import "context" import "context"
@ -9,7 +9,7 @@ type Limiter interface {
Limit() int Limit() int
} }
type RateLimiter interface { type TrafficLimiter interface {
In(key string) Limiter In(key string) Limiter
Out(key string) Limiter Out(key string) Limiter
} }

View File

@ -7,21 +7,23 @@ import (
"github.com/go-gost/core/admission" "github.com/go-gost/core/admission"
"github.com/go-gost/core/auth" "github.com/go-gost/core/auth"
"github.com/go-gost/core/chain" "github.com/go-gost/core/chain"
"github.com/go-gost/core/limiter" "github.com/go-gost/core/limiter/conn"
"github.com/go-gost/core/limiter/traffic"
"github.com/go-gost/core/logger" "github.com/go-gost/core/logger"
) )
type Options struct { type Options struct {
Addr string Addr string
Auther auth.Authenticator Auther auth.Authenticator
Auth *url.Userinfo Auth *url.Userinfo
TLSConfig *tls.Config TLSConfig *tls.Config
Admission admission.Admission Admission admission.Admission
RateLimiter limiter.RateLimiter TrafficLimiter traffic.TrafficLimiter
Chain chain.Chainer ConnLimiter conn.ConnLimiter
Logger logger.Logger Chain chain.Chainer
Service string Logger logger.Logger
ProxyProtocol int Service string
ProxyProtocol int
} }
type Option func(opts *Options) type Option func(opts *Options)
@ -56,9 +58,15 @@ func AdmissionOption(admission admission.Admission) Option {
} }
} }
func RateLimiterOption(rlimiter limiter.RateLimiter) Option { func TrafficLimiterOption(limiter traffic.TrafficLimiter) Option {
return func(opts *Options) { return func(opts *Options) {
opts.RateLimiter = rlimiter opts.TrafficLimiter = limiter
}
}
func ConnLimiterOption(limiter conn.ConnLimiter) Option {
return func(opts *Options) {
opts.ConnLimiter = limiter
} }
} }