enhance: add heartbeat for sse #705

This commit is contained in:
Jacky 2024-11-08 17:06:52 +08:00 committed by Hintay
parent ce68eb1658
commit 31be0b21c4
No known key found for this signature in database
GPG key ID: 120FC7FF121F2F2D
4 changed files with 25 additions and 12 deletions

View file

@ -5,6 +5,7 @@ import (
"github.com/0xJacky/Nginx-UI/model"
"github.com/gin-gonic/gin"
"io"
"time"
)
func Live(c *gin.Context) {
@ -19,15 +20,27 @@ func Live(c *gin.Context) {
notification.SetClient(c, evtChan)
notify := c.Writer.CloseNotify()
go func() {
<-notify
notification.RemoveClient(c)
}()
for n := range evtChan {
c.Stream(func(w io.Writer) bool {
c.SSEvent("message", n)
return false
})
c.Stream(func(w io.Writer) bool {
c.SSEvent("heartbeat", "")
return false
})
for {
select {
case n := <-evtChan:
c.Stream(func(w io.Writer) bool {
c.SSEvent("message", n)
return false
})
case <-time.After(30 * time.Second):
c.Stream(func(w io.Writer) bool {
c.SSEvent("heartbeat", "")
return false
})
case <-notify:
notification.RemoveClient(c)
return
}
}
}