diff --git a/CHANGELOG.md b/CHANGELOG.md index 7af6e66..d64fb70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,15 @@ # 更新日志 +25w36d - 2025-05-14 +--- +- PRE-RELEASE: 此版本是v3.3.0预发布版本,请勿在生产环境中使用; +- ADD: 为`netpoll`模式开启探测客户端是否断开功能 + 25w36c - 2025-05-14 --- - PRE-RELEASE: 此版本是v3.3.0预发布版本,请勿在生产环境中使用; - ADD: 加入带宽限制功能 +- CHANGE: 将`httpc`切换回主分支, `25w36b`测试的部分已被合入`httpc`主线 25w36b - 2025-05-13 --- diff --git a/DEV-VERSION b/DEV-VERSION index 1420bf3..c9f9483 100644 --- a/DEV-VERSION +++ b/DEV-VERSION @@ -1 +1 @@ -25w36c \ No newline at end of file +25w36d \ No newline at end of file diff --git a/main.go b/main.go index d0237d8..2cb9ac4 100644 --- a/main.go +++ b/main.go @@ -401,11 +401,13 @@ func main() { r = server.New( server.WithH2C(true), server.WithHostPorts(addr), + server.WithSenseClientDisconnection(true), ) r.AddProtocol("h2", factory.NewServerFactory()) } else { r = server.New( server.WithHostPorts(addr), + server.WithSenseClientDisconnection(true), ) } } else { @@ -485,8 +487,7 @@ func main() { defer logger.Close() defer func() { if hertZfile != nil { - var err error - err = hertZfile.Close() + err := hertZfile.Close() if err != nil { logError("Failed to close hertz log file: %v", err) } diff --git a/proxy/chunkreq.go b/proxy/chunkreq.go index 56e55a3..c760b9a 100644 --- a/proxy/chunkreq.go +++ b/proxy/chunkreq.go @@ -20,13 +20,22 @@ func ChunkedProxyRequest(ctx context.Context, c *app.RequestContext, u string, c err error ) + go func() { + <-ctx.Done() + if resp != nil && resp.Body != nil { + resp.Body.Close() + } + if req != nil { + req.Body.Close() + } + }() + rb := client.NewRequestBuilder(string(c.Request.Method()), u) rb.NoDefaultHeaders() rb.SetBody(c.Request.BodyStream()) rb.WithContext(ctx) req, err = rb.Build() - //req, err = client.NewRequest(string(method), u, c.Request.BodyStream()) if err != nil { HandleError(c, fmt.Sprintf("Failed to create request: %v", err)) return diff --git a/proxy/docker.go b/proxy/docker.go index f12a74e..696de84 100644 --- a/proxy/docker.go +++ b/proxy/docker.go @@ -38,6 +38,16 @@ func GhcrRequest(ctx context.Context, c *app.RequestContext, u string, cfg *conf err error ) + go func() { + <-ctx.Done() + if resp != nil && resp.Body != nil { + resp.Body.Close() + } + if req != nil { + req.Body.Close() + } + }() + method = c.Request.Method() rb := client.NewRequestBuilder(string(method), u) diff --git a/proxy/gitreq.go b/proxy/gitreq.go index 1afd856..5667d21 100644 --- a/proxy/gitreq.go +++ b/proxy/gitreq.go @@ -13,6 +13,22 @@ import ( ) func GitReq(ctx context.Context, c *app.RequestContext, u string, cfg *config.Config, mode string) { + + var ( + req *http.Request + resp *http.Response + ) + + go func() { + <-ctx.Done() + if resp != nil && resp.Body != nil { + resp.Body.Close() + } + if req != nil { + req.Body.Close() + } + }() + method := string(c.Request.Method()) reqBodyReader := bytes.NewBuffer(c.Request.Body()) @@ -29,10 +45,6 @@ func GitReq(ctx context.Context, c *app.RequestContext, u string, cfg *config.Co u = cfg.GitClone.SmartGitAddr + userPath + repoPath + remainingPath + "?" + queryParams.Encode() } - var ( - resp *http.Response - ) - if cfg.GitClone.Mode == "cache" { rb := gitclient.NewRequestBuilder(method, u) rb.NoDefaultHeaders()