From 707a01a2ddab521f4533d57046922ddaffc51d83 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Tue, 18 Aug 2026 09:12:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20SSE=20=E5=BF=83=E8=B7=B3=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E5=86=99=20w+flush(=E4=BA=8B=E4=BB=B6=E5=AF=86?= =?UTF-8?q?=E9=9B=86/=E9=98=9F=E5=88=97=E6=BB=A1=E4=BB=8D=E4=BF=9D?= =?UTF-8?q?=E6=B4=BB=E9=95=BF=E8=BF=9E=E6=8E=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 原心跳经 writeCh 发送, 事件密集时队列满被 drop, 远程 nginx 网关长时间无字节导致 504/半开 - 改为主循环直接 Fprintf(w, ": heartbeat\n\n") + Flush, 绕过 writeCh, 保证 15s 恒有心跳 - 对应 pi-desktop: GUI 回复丢失(SSE 3分钟被 ERR_INCOMPLETE_CHUNKED_ENCODING 切断) --- internal/plugins/webui/handler.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/plugins/webui/handler.go b/internal/plugins/webui/handler.go index 0305fe1..28c822c 100644 --- a/internal/plugins/webui/handler.go +++ b/internal/plugins/webui/handler.go @@ -1291,10 +1291,12 @@ func (h *Handler) handleChatEvents(w http.ResponseWriter, r *http.Request) { case <-done: return case <-ticker.C: - select { - case writeCh <- ": heartbeat": - default: + // 心跳直接写 w 并 flush(绕过 writeCh,事件密集/队列满时也能保活长连接, + // 避免远程 nginx 网关因长时间无字节而 504/半开)。 + if _, err := fmt.Fprintf(w, ": heartbeat\n\n"); err != nil { + return } + flusher.Flush() } } }