From 0be63c36251c723b10cba3461672c72241cf7bb7 Mon Sep 17 00:00:00 2001 From: csbzy Date: Wed, 23 Jul 2025 23:04:45 +0800 Subject: [PATCH] Fix SSE timeout will affected by http.Server 's WriteTimeout (#5024) Co-authored-by: csbzy Co-authored-by: Kevin Wan Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- rest/engine.go | 6 ++++++ rest/internal/response/withcoderesponsewriter.go | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/rest/engine.go b/rest/engine.go index f7a53987e..3be437799 100644 --- a/rest/engine.go +++ b/rest/engine.go @@ -10,6 +10,7 @@ import ( "github.com/zeromicro/go-zero/core/codec" "github.com/zeromicro/go-zero/core/load" + "github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/stat" "github.com/zeromicro/go-zero/rest/chain" "github.com/zeromicro/go-zero/rest/handler" @@ -70,6 +71,11 @@ func buildSSERoutes(routes []Route) []Route { for i, route := range routes { h := route.Handler routes[i].Handler = func(w http.ResponseWriter, r *http.Request) { + rc := http.NewResponseController(w) + err := rc.SetWriteDeadline(time.Time{}) + if err != nil { + logx.Errorf("set conn write deadline failed:%v", err) + } w.Header().Set(header.ContentType, header.ContentTypeEventStream) w.Header().Set(header.CacheControl, header.CacheControlNoCache) w.Header().Set(header.Connection, header.ConnectionKeepAlive) diff --git a/rest/internal/response/withcoderesponsewriter.go b/rest/internal/response/withcoderesponsewriter.go index 2a49c79a7..9975aef4c 100644 --- a/rest/internal/response/withcoderesponsewriter.go +++ b/rest/internal/response/withcoderesponsewriter.go @@ -59,3 +59,8 @@ func (w *WithCodeResponseWriter) WriteHeader(code int) { w.Writer.WriteHeader(code) w.Code = code } + +// Unwrap returns the underlying ResponseWriter. +func (w *WithCodeResponseWriter) Unwrap() http.ResponseWriter { + return w.Writer +}