From b41567a39ac31615c561024e43ef6fa3b31c894f Mon Sep 17 00:00:00 2001 From: lafay <2021211506@stu.hit.edu.cn> Date: Tue, 24 Mar 2026 04:23:23 +0800 Subject: [PATCH] fix(handler): adjust SSE heartbeat interval and cache control header - Updated Cache-Control header to include 'no-transform'. - Reduced heartbeat interval from 25 seconds to 10 seconds to accommodate common proxy idle timeouts. - Added comments for clarity on keepalive handling for SSE intermediaries and proxies. --- internal/handler/message_handler.go | 10 ++++++++-- internal/service/admin_post_service.go | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/internal/handler/message_handler.go b/internal/handler/message_handler.go index a01fee7..31b142d 100644 --- a/internal/handler/message_handler.go +++ b/internal/handler/message_handler.go @@ -65,7 +65,7 @@ func (h *MessageHandler) HandleSSE(c *gin.Context) { } w.Header().Set("Content-Type", "text/event-stream") - w.Header().Set("Cache-Control", "no-cache") + w.Header().Set("Cache-Control", "no-cache, no-transform") w.Header().Set("Connection", "keep-alive") w.Header().Set("X-Accel-Buffering", "no") c.Status(http.StatusOK) @@ -89,7 +89,8 @@ func (h *MessageHandler) HandleSSE(c *gin.Context) { } } - heartbeat := time.NewTicker(25 * time.Second) + // Use a shorter heartbeat interval to survive common 50-60s proxy idle timeout. + heartbeat := time.NewTicker(10 * time.Second) defer heartbeat.Stop() for { @@ -101,6 +102,11 @@ func (h *MessageHandler) HandleSSE(c *gin.Context) { return } case <-heartbeat.C: + // Comment keepalive line for SSE intermediaries/proxies. + if _, err := fmt.Fprint(w, ": keepalive\n\n"); err != nil { + return + } + flusher.Flush() if _, err := fmt.Fprint(w, "event: heartbeat\ndata: {}\n\n"); err != nil { return } diff --git a/internal/service/admin_post_service.go b/internal/service/admin_post_service.go index 06cda00..df4e96e 100644 --- a/internal/service/admin_post_service.go +++ b/internal/service/admin_post_service.go @@ -1,4 +1,4 @@ -package service +package service import ( "context"