Enha: remove extra connection
This commit is contained in:
@ -57,7 +57,7 @@ func (broker *Broker) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Header().Set("Access-Control-Allow-Credentials", "true")
|
w.Header().Set("Access-Control-Allow-Credentials", "true")
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
// browser can close sse on its own; ping every 2s to prevent
|
// browser can close sse on its own; ping every 2s to prevent
|
||||||
heartbeat := time.NewTicker(2 * time.Second)
|
heartbeat := time.NewTicker(8 * time.Second)
|
||||||
defer heartbeat.Stop()
|
defer heartbeat.Stop()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@ -67,13 +67,20 @@ func (broker *Broker) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
case event := <-broker.Notifier:
|
case event := <-broker.Notifier:
|
||||||
broker.log.Debug("got event", "event", event)
|
broker.log.Debug("got event", "event", event)
|
||||||
_, err := fmt.Fprintf(w, "event: %s\ndata: %s\n\n", event.EventName, event.Payload)
|
for i := 0; i < 10; i++ { // Repeat 3 times
|
||||||
if err != nil {
|
_, err := fmt.Fprintf(w, "event: %s\ndata: %s\n\n", event.EventName, event.Payload)
|
||||||
broker.log.Error("failed to write event", "error", err)
|
if err != nil {
|
||||||
// Client disconnected
|
broker.log.Error("write failed", "error", err)
|
||||||
return
|
return
|
||||||
|
}
|
||||||
|
w.(http.Flusher).Flush()
|
||||||
|
// Short delay between sends (non-blocking)
|
||||||
|
select {
|
||||||
|
case <-time.After(20 * time.Millisecond): // Adjust delay as needed
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
w.(http.Flusher).Flush()
|
|
||||||
case <-heartbeat.C:
|
case <-heartbeat.C:
|
||||||
// Send SSE heartbeat comment
|
// Send SSE heartbeat comment
|
||||||
if _, err := fmt.Fprint(w, ":\n\n"); err != nil {
|
if _, err := fmt.Fprint(w, ":\n\n"); err != nil {
|
||||||
|
@ -53,7 +53,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr/>
|
<hr/>
|
||||||
<div class="grid grid-cols-1 md:grid-cols-5 md:gap-4">
|
<div class="grid grid-cols-1 md:grid-cols-5 md:gap-4">
|
||||||
<div hx-get="/actionhistory" hx-trigger="sse:backlog_{{.Room.ID}}" class="md:col-span-1">
|
<div hx-get="/actionhistory" class="md:col-span-1">
|
||||||
{{template "actionhistory" .Room.ActionHistory}}
|
{{template "actionhistory" .Room.ActionHistory}}
|
||||||
</div>
|
</div>
|
||||||
<div id="cardtable" class="md:col-span-3">
|
<div id="cardtable" class="md:col-span-3">
|
||||||
|
Reference in New Issue
Block a user