优化连接管理和日志记录
This commit is contained in:
115
server/server.go
115
server/server.go
@@ -9,11 +9,10 @@ import (
|
||||
"proxy-server/server/fwd"
|
||||
"proxy-server/server/pkg/env"
|
||||
"proxy-server/server/pkg/orm"
|
||||
"proxy-server/server/web"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/lmittmann/tint"
|
||||
"github.com/mattn/go-colorable"
|
||||
)
|
||||
@@ -30,12 +29,18 @@ func Start() {
|
||||
env.Init()
|
||||
orm.Init()
|
||||
|
||||
// 退出信号
|
||||
osQuit := make(chan os.Signal)
|
||||
signal.Notify(osQuit, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
errQuit := make(chan struct{})
|
||||
defer close(errQuit)
|
||||
|
||||
// 启动服务
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
errQuit := make(chan error)
|
||||
defer close(errQuit)
|
||||
wg := utils.CountWaitGroup{}
|
||||
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
@@ -44,13 +49,10 @@ func Start() {
|
||||
if err != nil {
|
||||
slog.Error("代理服务发生错误", "err", err)
|
||||
}
|
||||
errQuit <- err
|
||||
errQuit <- struct{}{}
|
||||
}()
|
||||
|
||||
// 等待退出信号
|
||||
osQuit := make(chan os.Signal)
|
||||
signal.Notify(osQuit, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
select {
|
||||
case <-osQuit:
|
||||
slog.Info("服务关闭")
|
||||
@@ -58,62 +60,23 @@ func Start() {
|
||||
slog.Error("服务异常退出")
|
||||
}
|
||||
|
||||
// 等待子服务退出
|
||||
// 退出服务
|
||||
cancel()
|
||||
|
||||
timeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
wgCh := utils.ChanWgWait(timeout, &wg)
|
||||
close(wgCh)
|
||||
|
||||
select {
|
||||
case <-timeout.Done():
|
||||
slog.Error("关闭超时,强制关闭")
|
||||
slog.Warn("关闭超时,强制关闭")
|
||||
case <-wgCh:
|
||||
slog.Info("服务已退出")
|
||||
slog.Debug("服务已退出")
|
||||
}
|
||||
}
|
||||
|
||||
func initLog() {
|
||||
slog.SetLogLoggerLevel(slog.LevelDebug)
|
||||
}
|
||||
|
||||
func startFwdServer(ctx context.Context) error {
|
||||
server := fwd.New(nil)
|
||||
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
server.Close()
|
||||
}()
|
||||
|
||||
server.Run(ctx)
|
||||
return nil
|
||||
}
|
||||
|
||||
func startMntServer(ctx context.Context) {
|
||||
|
||||
}
|
||||
|
||||
func startWebServer(ctx context.Context) {
|
||||
|
||||
}
|
||||
|
||||
func Start2() {
|
||||
defer func() {
|
||||
err := recover()
|
||||
if err != nil {
|
||||
slog.Error("服务由于意外的 panic 导致退出", err)
|
||||
}
|
||||
}()
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
// 初始化环境变量
|
||||
err := godotenv.Load()
|
||||
if err != nil {
|
||||
slog.Debug("没有本地环境变量文件")
|
||||
}
|
||||
|
||||
// 配置日志
|
||||
writer := colorable.NewColorable(os.Stdout)
|
||||
logger := slog.New(tint.NewHandler(writer, &tint.Options{
|
||||
Level: slog.LevelDebug,
|
||||
@@ -126,32 +89,24 @@ func Start2() {
|
||||
},
|
||||
}))
|
||||
slog.SetDefault(logger)
|
||||
|
||||
// 初始化公共组件
|
||||
orm.Init()
|
||||
|
||||
// 启动子服务
|
||||
goCount := 1
|
||||
errChan := make(chan error, goCount)
|
||||
ctxC, cancel := context.WithCancel(ctx)
|
||||
defer cancel()
|
||||
|
||||
go web.Start(ctxC, errChan)
|
||||
// go monitor.Start2(ctxC, errChan)
|
||||
slog.Info("服务启动成功")
|
||||
|
||||
// 监听异常
|
||||
well := true
|
||||
for i := 0; i < goCount; i++ {
|
||||
err := <-errChan
|
||||
if err != nil {
|
||||
slog.Error("服务异常退出", err)
|
||||
if well { // 第一次出错时取消其他服务
|
||||
well = false
|
||||
cancel()
|
||||
}
|
||||
}
|
||||
}
|
||||
close(errChan)
|
||||
slog.Info("服务已全部退出")
|
||||
}
|
||||
|
||||
func startFwdServer(ctx context.Context) error {
|
||||
server := fwd.New(nil)
|
||||
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
server.Close()
|
||||
}()
|
||||
|
||||
server.Run()
|
||||
return nil
|
||||
}
|
||||
|
||||
func startMntServer(ctx context.Context) {
|
||||
|
||||
}
|
||||
|
||||
func startWebServer(ctx context.Context) {
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user