소스 검색

修复 http 关闭阻塞的问题

Signed-off-by: allan716 <[email protected]>
allan716 3 년 전
부모
커밋
431c1d3a87
1개의 변경된 파일12개의 추가작업 그리고 5개의 파일을 삭제
  1. 12 5
      internal/backend/backend.go

+ 12 - 5
internal/backend/backend.go

@@ -97,16 +97,23 @@ func (b *BackEnd) Restart() {
 		}
 		b.running = false
 
+		exitOk := make(chan interface{}, 1)
+		defer close(exitOk)
 		ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 		defer cancel()
-		if err := b.srv.Shutdown(ctx); err != nil {
-			b.logger.Errorln("Http Server Shutdown:", err)
-		}
+		go func() {
+			if err := b.srv.Shutdown(ctx); err != nil {
+				b.logger.Errorln("Http Server Shutdown:", err)
+			}
+			exitOk <- true
+		}()
 		select {
 		case <-ctx.Done():
-			b.logger.Warningln("timeout of 5 seconds.")
+			b.logger.Warningln("Http Server Shutdown timeout of 5 seconds.")
+		case <-exitOk:
+			b.logger.Infoln("Http Server Shutdown Successfully")
 		}
-		b.logger.Infoln("Http Server exiting")
+		b.logger.Infoln("Http Server Shutdown Done.")
 	}
 
 	for {