diff --git a/app/electron/main.js b/app/electron/main.js index a058820d4..9ccf9f604 100644 --- a/app/electron/main.js +++ b/app/electron/main.js @@ -551,8 +551,8 @@ const initKernel = (initData) => { writeLog('booted kernel process [pid=' + kernelProcessPid + ']') kernelProcess.on('close', (code) => { + writeLog(`kernel exited with code [${code}]`) if (0 !== code) { - writeLog(`kernel exited with code [${code}]`) switch (code) { case 20: showErrorWindow('⚠️ 数据库被锁定 The database is locked', diff --git a/kernel/model/process.go b/kernel/model/process.go index 1be4a41af..85827eeb4 100644 --- a/kernel/model/process.go +++ b/kernel/model/process.go @@ -32,16 +32,26 @@ func HookResident() { } for range time.Tick(time.Second * 30) { - if 0 == util.CountSessions() { - time.Sleep(time.Second * 7) - if 0 == util.CountSessions() { - logging.LogInfof("no active session, exit kernel process now") - Close(false, 1) - } + if makeSureSessionEmpty() { + logging.LogInfof("no active session, exit kernel process now") + Close(false, 1) } } } +func makeSureSessionEmpty() bool { + count := 0 + for i := 0; i < 7; i++ { + count = util.CountSessions() + //logging.LogDebugf("session count [%d]", count) + if 0 < count { + return false + } + time.Sleep(time.Second * 1) + } + return true +} + func HandleSignal() { c := make(chan os.Signal) signal.Notify(c, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM) diff --git a/kernel/server/serve.go b/kernel/server/serve.go index ced83e71a..679aad83b 100644 --- a/kernel/server/serve.go +++ b/kernel/server/serve.go @@ -308,7 +308,7 @@ func serveWebSocket(ginServer *gin.Engine) { }) util.WebSocketServer.HandlePong(func(session *melody.Session) { - //model.Logger.Debugf("pong") + //logging.LogInfof("pong") }) util.WebSocketServer.HandleConnect(func(s *melody.Session) { @@ -337,9 +337,14 @@ func serveWebSocket(ginServer *gin.Engine) { } } + if !authOk { + // 用于授权页保持连接,避免非常驻内存内核自动退出 https://github.com/siyuan-note/insider/issues/1099 + authOk = strings.Contains(s.Request.RequestURI, "/ws?app=siyuan&id=auth") + } + if !authOk { s.CloseWithMsg([]byte(" unauthenticated")) - //logging.LogWarnf("closed a unauthenticated session [%s]", util.GetRemoteAddr(s)) + //logging.LogWarnf("closed an unauthenticated session [%s]", util.GetRemoteAddr(s)) return } @@ -351,7 +356,7 @@ func serveWebSocket(ginServer *gin.Engine) { util.WebSocketServer.HandleDisconnect(func(s *melody.Session) { util.RemovePushChan(s) //sessionId, _ := s.Get("id") - //model.Logger.Debugf("ws [%s] disconnected", sessionId) + //logging.LogInfof("ws [%s] disconnected", sessionId) }) util.WebSocketServer.HandleError(func(s *melody.Session, err error) {