Update write deadline on SSE event push
Otherwise the server sees the connection as exceeding the deadline and closes it after 30 seconds (our current timeout) Issue: #12
This commit is contained in:
parent
41ed443d54
commit
03d40774cb
1 changed files with 14 additions and 1 deletions
15
api/event.go
15
api/event.go
|
|
@ -104,6 +104,9 @@ func streamEvents(w http.ResponseWriter, r *http.Request, u platform.User) {
|
||||||
w.Header().Set("Connection", "keep-alive")
|
w.Header().Set("Connection", "keep-alive")
|
||||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
|
|
||||||
|
// Get response controller for deadline management
|
||||||
|
rc := http.NewResponseController(w)
|
||||||
|
|
||||||
uid, err := uuid.NewUUID()
|
uid, err := uuid.NewUUID()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("failed to create uuid")
|
log.Error().Err(err).Msg("failed to create uuid")
|
||||||
|
|
@ -154,14 +157,24 @@ func streamEvents(w http.ResponseWriter, r *http.Request, u platform.User) {
|
||||||
return
|
return
|
||||||
case t := <-ticker.C:
|
case t := <-ticker.C:
|
||||||
// Send a heartbeat message
|
// Send a heartbeat message
|
||||||
|
if err := rc.SetWriteDeadline(time.Now().Add(30 * time.Second)); err != nil {
|
||||||
|
log.Error().Err(err).Msg("Failed to set write deadline before heartbeat")
|
||||||
|
delete(connectionsSSE, &connection)
|
||||||
|
return
|
||||||
|
}
|
||||||
err = connection.SendHeartbeat(w, t)
|
err = connection.SendHeartbeat(w, t)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to send heartbeat")
|
log.Error().Err(err).Msg("Failed to send heartbeat")
|
||||||
}
|
}
|
||||||
case e := <-connection.chanEvent:
|
case e := <-connection.chanEvent:
|
||||||
|
if err := rc.SetWriteDeadline(time.Now().Add(30 * time.Second)); err != nil {
|
||||||
|
log.Error().Err(err).Msg("Failed to set write deadline before event")
|
||||||
|
delete(connectionsSSE, &connection)
|
||||||
|
return
|
||||||
|
}
|
||||||
err = connection.SendEvent(w, e)
|
err = connection.SendEvent(w, e)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("Failed to send heartbeat")
|
log.Error().Err(err).Msg("Failed to send event")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue