From a936505700da00e5f931facbe408c77cce07b695 Mon Sep 17 00:00:00 2001 From: qydysky Date: Tue, 18 Mar 2025 07:32:44 +0000 Subject: [PATCH] 1 --- README.md | 2 +- config.go | 14 +++++++++----- http.go | 4 ++-- local.go | 4 ++-- main.go | 2 +- ws.go | 4 ++-- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index c950ced..315eeab 100755 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ config: - *addr*: string 监听端口 例:`0.0.0.0:8081` - *matchRule*: string 匹配规则,默认`prefix`。 `prefix`:当未匹配到时,返回最近的/匹配, `all`:当未匹配到时,返回404 -- reqIdLoop: int 请求id环大小,用于日志识别请求,默认`1000` +- reqIdLoop: uint 请求id环大小,用于日志识别请求,默认`1000` - *copyBlocks*: int 转发的块数量,默认`1000` - *retryBlocks*: {} 重试, 当停用时,分配仅进行一次。当所有块都在使用中时,跳过。当请求没有`Content-Length`时,跳过。 - *size*: string 重试的块大小,默认`1M` diff --git a/config.go b/config.go index 80bdf83..22dd634 100755 --- a/config.go +++ b/config.go @@ -8,6 +8,7 @@ import ( "errors" "fmt" "io" + "math" "net" "net/http" "os" @@ -47,8 +48,8 @@ type Config struct { routeMap sync.Map `json:"-"` Routes []Route `json:"routes"` - ReqIdLoop int `json:"reqIdLoop"` - reqId atomic.Int64 `json:"-"` + ReqIdLoop int `json:"reqIdLoop"` + reqId atomic.Uint32 `json:"-"` } func (t *Config) Run(ctx context.Context, logger Logger) { @@ -71,9 +72,12 @@ func (t *Config) Run(ctx context.Context, logger Logger) { } } } - if t.ReqIdLoop == 0 { + if t.ReqIdLoop <= 0 { t.ReqIdLoop = 1000 + } else if t.ReqIdLoop > math.MaxUint32 { + t.ReqIdLoop = math.MaxUint32 } + if t.BlocksI == nil { if t.CopyBlocks == 0 { t.CopyBlocks = 1000 @@ -148,7 +152,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { t.routeP.Store(routePath, func(w http.ResponseWriter, r *http.Request) { reqId := t.reqId.Add(1) - if reqId >= int64(t.ReqIdLoop) { + if reqId >= uint32(t.ReqIdLoop) { t.reqId.Store(0) } @@ -233,7 +237,7 @@ func (t *Config) SwapSign(ctx context.Context, logger Logger) { var e error = ErrAllBacksFail type reqDealer interface { - Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error + Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error } // repack diff --git a/http.go b/http.go index 6db6dd0..2a7dfd8 100644 --- a/http.go +++ b/http.go @@ -18,7 +18,7 @@ import ( func init() { type I interface { - Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error + Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error } if e := component2.Register[I]("http", httpDealer{}); e != nil { panic(e) @@ -27,7 +27,7 @@ func init() { type httpDealer struct{} -func (httpDealer) Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error { +func (httpDealer) Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error { var ( opT = time.Now() resp *http.Response diff --git a/local.go b/local.go index 1f1cbc9..85eab75 100644 --- a/local.go +++ b/local.go @@ -16,7 +16,7 @@ import ( func init() { type I interface { - Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error + Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error } if e := component2.Register[I]("local", localDealer{}); e != nil { panic(e) @@ -25,7 +25,7 @@ func init() { type localDealer struct{} -func (localDealer) Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error { +func (localDealer) Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error { var ( opT = time.Now() logFormat = "%v %v%v > %v local %v %v %v" diff --git a/main.go b/main.go index e18543e..bbc8eb3 100755 --- a/main.go +++ b/main.go @@ -185,7 +185,7 @@ var ( ErrCopy = errors.New("ErrCopy") ErrReqReBodyFail = errors.New("ErrReqReBodyFail") ErrReqReBodyOverflow = errors.New("ErrReqReBodyOverflow") - ErrReqRetry = errors.New("ErrReqRetry") + ErrReqRetry = errors.New("ErrReqRetry") ErrReqCreFail = errors.New("ErrReqCreFail") ErrReqDoFail = errors.New("ErrReqDoFail") ErrResDoFail = errors.New("ErrResDoFail") diff --git a/ws.go b/ws.go index 8324ba9..ecd9071 100644 --- a/ws.go +++ b/ws.go @@ -27,7 +27,7 @@ import ( func init() { type I interface { - Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error + Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error } if e := component2.Register[I]("ws", wsDealer{}); e != nil { panic(e) @@ -36,7 +36,7 @@ func init() { type wsDealer struct{} -func (wsDealer) Deal(ctx context.Context, reqId int64, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error { +func (wsDealer) Deal(ctx context.Context, reqId uint32, w http.ResponseWriter, r *http.Request, routePath string, chosenBack *Back, logger Logger, blocksi pslice.BlocksI[byte]) error { var ( opT = time.Now() resp *http.Response -- 2.39.2