From 655b67eb5c1bf7b6b997bbaee4be86457ff361a6 Mon Sep 17 00:00:00 2001 From: tbphp Date: Sat, 26 Jul 2025 12:45:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E5=BC=8F=E5=93=8D=E5=BA=94=E7=9A=84=E6=80=A7=E8=83=BD=E5=92=8C?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/proxy/response_handlers.go | 38 ++++++++++++----------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/internal/proxy/response_handlers.go b/internal/proxy/response_handlers.go index 116db28..dc146ca 100644 --- a/internal/proxy/response_handlers.go +++ b/internal/proxy/response_handlers.go @@ -1,10 +1,8 @@ package proxy import ( - "bufio" - "net/http" - "io" + "net/http" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" @@ -23,29 +21,23 @@ func (ps *ProxyServer) handleStreamingResponse(c *gin.Context, resp *http.Respon return } - scanner := bufio.NewScanner(resp.Body) - scanner.Buffer(make([]byte, 0, 64*1024), 1024*1024) - for scanner.Scan() { - select { - case <-c.Request.Context().Done(): - logrus.Debugf("Client disconnected, closing stream.") - return - default: + buf := make([]byte, 4*1024) + for { + n, err := resp.Body.Read(buf) + if n > 0 { + if _, writeErr := c.Writer.Write(buf[:n]); writeErr != nil { + logUpstreamError("writing stream to client", writeErr) + return + } + flusher.Flush() } - - if _, err := c.Writer.Write(scanner.Bytes()); err != nil { - logUpstreamError("writing stream to client", err) + if err == io.EOF { + break + } + if err != nil { + logUpstreamError("reading from upstream", err) return } - if _, err := c.Writer.Write([]byte("\n")); err != nil { - logUpstreamError("writing stream newline to client", err) - return - } - flusher.Flush() - } - - if err := scanner.Err(); err != nil { - logUpstreamError("reading from upstream scanner", err) } }