Browse Source

enhance: add heartbeat for sse #705

Jacky 8 months ago
parent
commit
31be0b21c4

+ 22 - 9
api/notification/live.go

@@ -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
+		}
 	}
 }

+ 0 - 1
app/src/components/Notification/Notification.vue

@@ -58,7 +58,6 @@ function newSSE() {
 
   // reconnect
   s.onerror = reconnect
-  s.onabort = reconnect
 
   return s
 }

+ 1 - 1
app/src/version.json

@@ -1 +1 @@
-{"version":"2.0.0-beta.39","build_id":1,"total_build":368}
+{"version":"2.0.0-beta.39","build_id":3,"total_build":370}

+ 2 - 1
internal/nginx/ngx_conf_parse_test.go

@@ -14,7 +14,8 @@ func TestNgxConfParse(t *testing.T) {
 		fmt.Println(err)
 		return
 	}
-	n := p.Parse()
+
+	n, _ := p.Parse()
 
 	fn(n.Block, 0)