From: qydysky Date: Tue, 12 Mar 2024 15:08:11 +0000 (+0800) Subject: 1 X-Git-Tag: v0.1.20240312150831 X-Git-Url: http://127.0.0.1:8081/?a=commitdiff_plain;h=94ab0476d22d40058ba86aee74b79d4f0953fa66;p=front%2F.git 1 --- diff --git a/README.md b/README.md index b6d1646..0a59150 100755 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ config: dealer: -- errToSec: int 当后端响应超过(ws则指初次返回时间)指定秒,将会触发errBanSec +- errToSec: float64 当后端响应超过(ws则指初次返回时间)指定秒,将会触发errBanSec - errBanSec: int 当后端错误时(指连接失败,不指后端错误响应),将会禁用若干秒 - reqHeader: [] 请求后端前,请求头处理器, 可以动态增加/删除 - action: string 可选access、deny、replace、add、del、set。 diff --git a/http.go b/http.go index eb0d40d..53699da 100644 --- a/http.go +++ b/http.go @@ -58,8 +58,15 @@ func httpDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, rou } resp, e = client.Do(req) if e != nil && !errors.Is(e, ErrRedirect) && !errors.Is(e, context.Canceled) { - chosenBack.Disable() logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v http %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, e, time.Since(opT))) + chosenBack.Disable() + resp = nil + } + + if chosenBack.ErrToSec != 0 && time.Since(opT).Seconds() > chosenBack.ErrToSec { + logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v http 超时响应 %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) + chosenBack.Disable() + resp = nil } } @@ -68,13 +75,6 @@ func httpDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, rou return ErrAllBacksFail } - if chosenBack.ErrToSec != 0 && time.Since(opT).Seconds() > chosenBack.ErrToSec { - logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v http 超时响应 %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) - chosenBack.Disable() - } else { - logger.Debug(`T:`, fmt.Sprintf("%v > %v > %v http ok %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) - } - { cookie := &http.Cookie{ Name: "_psign_" + cookie, diff --git a/main.go b/main.go index fe86ce0..249513f 100755 --- a/main.go +++ b/main.go @@ -179,5 +179,6 @@ var ( ErrHeaderCheckFail = errors.New("ErrHeaderCheckFail") ErrBodyCheckFail = errors.New("ErrBodyCheckFail") ErrAllBacksFail = errors.New("ErrAllBacksFail") + ErrBackFail = errors.New("ErrBackFail") ErrNoRoute = errors.New("ErrNoRoute") ) diff --git a/ws.go b/ws.go index b3006ad..b2101cc 100644 --- a/ws.go +++ b/ws.go @@ -59,23 +59,27 @@ func wsDealer(ctx context.Context, w http.ResponseWriter, r *http.Request, route conn, resp, e = DialContext(ctx, url, reqHeader) if e != nil && !errors.Is(e, context.Canceled) { - chosenBack.Disable() logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, e, time.Since(opT))) + chosenBack.Disable() + conn = nil + resp = nil + } + if chosenBack.ErrToSec != 0 && time.Since(opT).Seconds() > chosenBack.ErrToSec { + logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws 超时响应 %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) + chosenBack.Disable() + conn.Close() + conn = nil + resp = nil } } if resp == nil || conn == nil { - logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, ErrAllBacksFail, time.Since(opT))) + logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws %v %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, ErrBackFail, time.Since(opT))) return ErrAllBacksFail } - if chosenBack.ErrToSec != 0 && time.Since(opT).Seconds() > chosenBack.ErrToSec { - logger.Warn(`W:`, fmt.Sprintf("%v > %v > %v ws 超时响应 %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) - chosenBack.Disable() - } else { - logger.Debug(`T:`, fmt.Sprintf("%v > %v > %v ws ok %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) - } + logger.Debug(`T:`, fmt.Sprintf("%v > %v > %v ws ok %v", chosenBack.route.config.Addr, routePath, chosenBack.Name, time.Since(opT))) { cookie := &http.Cookie{