mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-20 13:38:11 +02:00
v0.4.3 : anti-buffering SSE (Cloudflare) - fin des derniers messages en retard au refresh
Le chat E2E d'app.ajean.link traverse Cloudflare (ajean.link, proxy orange) qui bufferise le flux SSE par lots : la queue du replay arrivait 20-30s apres le reste, de facon intermittente (surtout Safari iOS). Corrige par la technique standard : padding d'amorcage en tete de flux + padding sur caught_up (force le flush de la queue), Cache-Control: no-transform (interdit a Cloudflare de bufferiser/compresser), et heartbeat 15s->4s (borne le pire cas).
This commit is contained in:
1 parent
7d104e3213
commit
51c2c2d80f
7 files changed
+25
-8
No files matched your search
@@ -830,7 +830,9 @@ func sseHeartbeat(w http.ResponseWriter, flusher http.Flusher) (*sync.Mutex, fun
|
||||
mu := &sync.Mutex{}
|
||||
done := make(chan struct{})
|
||||
go func() {
|
||||
t := time.NewTicker(15 * time.Second)
|
||||
// 4 s (et non 15) : borne le temps qu'un dernier bout de flux peut rester
|
||||
// coincé dans un buffer proxy (Cloudflare) faute d'octets pour le pousser.
|
||||
t := time.NewTicker(4 * time.Second)
|
||||
defer t.Stop()
|
||||
for {
|
||||
select {
|
||||
@@ -907,7 +909,7 @@ func handleChat(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
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("X-Accel-Buffering", "no")
|
||||
flusher, _ := w.(http.Flusher)
|
||||
mu, stop := sseHeartbeat(w, flusher)
|
||||
|
||||
Reference in new issue
Block a user