From fb7e54a3afe75bf9a56679f422713078f08901af Mon Sep 17 00:00:00 2001 From: naiba Date: Fri, 20 Aug 2021 10:45:10 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20v0.9.29=20WebSSH=20ping-pong=20?= =?UTF-8?q?=E4=BF=9D=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- cmd/dashboard/controller/common_page.go | 30 +++++++++---- resource/template/dashboard/terminal.html | 51 ++++++++++++++++------- service/dao/dao.go | 2 +- 4 files changed, 59 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 81756f6..94e2477 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@
LOGO designed by 熊大 .

-    +   

:trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。

diff --git a/cmd/dashboard/controller/common_page.go b/cmd/dashboard/controller/common_page.go index 6b6c0b8..e26ac7f 100644 --- a/cmd/dashboard/controller/common_page.go +++ b/cmd/dashboard/controller/common_page.go @@ -294,11 +294,22 @@ func (cp *commonPage) terminal(c *gin.Context) { deadlineCh := make(chan interface{}) go func() { + // 对方连接超时 connectDeadline := time.NewTimer(time.Second * 15) <-connectDeadline.C deadlineCh <- struct{}{} }() + go func() { + // PING 保活 + for { + if err = conn.WriteMessage(websocket.PingMessage, []byte{}); err != nil { + return + } + time.Sleep(time.Second * 10) + } + }() + dataCh := make(chan []byte) errorCh := make(chan error) go func() { @@ -318,10 +329,20 @@ func (cp *commonPage) terminal(c *gin.Context) { var dataBuffer [][]byte var distConn *websocket.Conn + checkDistConn := func() { + if distConn == nil { + if isAgent { + distConn = terminal.userConn + } else { + distConn = terminal.agentConn + } + } + } for { select { case <-deadlineCh: + checkDistConn() if distConn == nil { return } @@ -329,14 +350,7 @@ func (cp *commonPage) terminal(c *gin.Context) { return case data := <-dataCh: dataBuffer = append(dataBuffer, data) - if distConn == nil { - // 传递给对方 - if isAgent { - distConn = terminal.userConn - } else { - distConn = terminal.agentConn - } - } + checkDistConn() if distConn != nil { for i := 0; i < len(dataBuffer); i++ { err = distConn.WriteMessage(websocket.BinaryMessage, dataBuffer[i]) diff --git a/resource/template/dashboard/terminal.html b/resource/template/dashboard/terminal.html index 896b988..4aea4d3 100644 --- a/resource/template/dashboard/terminal.html +++ b/resource/template/dashboard/terminal.html @@ -32,6 +32,41 @@ diff --git a/service/dao/dao.go b/service/dao/dao.go index e91268a..bb73d75 100644 --- a/service/dao/dao.go +++ b/service/dao/dao.go @@ -13,7 +13,7 @@ import ( pb "github.com/naiba/nezha/proto" ) -var Version = "v0.9.28" // !!记得修改 README 中的 badge 版本!! +var Version = "v0.9.29" // !!记得修改 README 中的 badge 版本!! var ( Conf *model.Config