From 3c76050f1823465bab2c6d9772b07f8dd88e189b Mon Sep 17 00:00:00 2001 From: WJQSERVER Date: Mon, 27 Jan 2025 14:27:49 +0800 Subject: [PATCH] 2.0.5 --- CHANGELOG.md | 8 ++++++++ VERSION | 2 +- proxy/chunkreq.go | 38 ++++---------------------------------- 3 files changed, 13 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43d3790..863aa44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # 更新日志 +2.0.5 +--- +- RELEASE: v2.0.5正式版发布; +- CHANGE: 优化响应体分块复制实现 +- ADD: 加入缓存池 +- CHANGE: 改进缓存实现 +- CHANGE: 部分杂项改进 + 25w09a --- - PRE-RELEASE: 此版本是v2.0.5的预发布版本,请勿在生产环境中使用; diff --git a/VERSION b/VERSION index 26e3379..b9d2bdf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.4 \ No newline at end of file +2.0.5 \ No newline at end of file diff --git a/proxy/chunkreq.go b/proxy/chunkreq.go index 2b147f5..72fac16 100644 --- a/proxy/chunkreq.go +++ b/proxy/chunkreq.go @@ -47,9 +47,6 @@ func ChunkedProxyRequest(c *gin.Context, u string, cfg *config.Config, mode stri method := c.Request.Method logInfo("%s %s %s %s %s", c.ClientIP(), method, u, c.Request.Header.Get("User-Agent"), c.Request.Proto) - // 创建HTTP客户端 - //client := &http.Client{} - // 发送HEAD请求, 预获取Content-Length headReq, err := http.NewRequest("HEAD", u, nil) if err != nil { @@ -108,42 +105,15 @@ func ChunkedProxyRequest(c *gin.Context, u string, cfg *config.Config, mode stri c.Status(resp.StatusCode) - /* - if err := chunkedCopyResponseBody(c, resp.Body); err != nil { - logError("%s %s %s %s %s 响应复制错误: %v", c.ClientIP(), method, u, c.Request.Header.Get("User-Agent"), c.Request.Proto, err) - } - */ - // 使用固定32KB缓冲池 buffer := BufferPool.Get().([]byte) defer BufferPool.Put(buffer) - if _, err := io.CopyBuffer(c.Writer, resp.Body, buffer); err != nil { + _, err = io.CopyBuffer(c.Writer, resp.Body, buffer) + if err != nil { logError("%s %s %s %s %s 响应复制错误: %v", c.ClientIP(), method, u, c.Request.Header.Get("User-Agent"), c.Request.Proto, err) return + } else { + c.Writer.Flush() // 确保刷入 } } - -/* - -// 复制响应体 -func chunkedCopyResponseBody(c *gin.Context, respBody io.Reader) error { - buf := make([]byte, chunkedBufferSize) - for { - n, err := respBody.Read(buf) - if n > 0 { - if _, err := c.Writer.Write(buf[:n]); err != nil { - return err - } - c.Writer.Flush() // 确保每次写入后刷新 - } - if err != nil { - if err == io.EOF { - break - } - return err - } - } - return nil -} -*/