Parcourir la source

:bug: 桌面端内核在授权页自动退出 https://github.com/siyuan-note/insider/issues/1099

Liang Ding il y a 2 ans
Parent
commit
2be5545dbf
3 fichiers modifiés avec 25 ajouts et 10 suppressions
  1. 1 1
      app/electron/main.js
  2. 16 6
      kernel/model/process.go
  3. 8 3
      kernel/server/serve.go

+ 1 - 1
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',

+ 16 - 6
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)

+ 8 - 3
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) {