优化项目结构
This commit is contained in:
@@ -4,16 +4,25 @@ import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
"os/signal"
|
||||
"proxy-server/pkg/utils"
|
||||
"proxy-server/server/fwd"
|
||||
"proxy-server/server/pkg/env"
|
||||
"proxy-server/server/pkg/orm"
|
||||
"proxy-server/server/web"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/lmittmann/tint"
|
||||
"github.com/mattn/go-colorable"
|
||||
)
|
||||
|
||||
type Context struct {
|
||||
context.Context
|
||||
log *slog.Logger
|
||||
}
|
||||
|
||||
func Start() {
|
||||
|
||||
// 初始化
|
||||
@@ -21,14 +30,73 @@ func Start() {
|
||||
env.Init()
|
||||
orm.Init()
|
||||
|
||||
// 启动代理服务
|
||||
fwd.New(nil).Run(context.Background(), make(chan error))
|
||||
// 启动服务
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
errQuit := make(chan error)
|
||||
defer close(errQuit)
|
||||
wg := utils.CountWaitGroup{}
|
||||
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
defer wg.Done()
|
||||
err := startFwdServer(ctx)
|
||||
if err != nil {
|
||||
slog.Error("代理服务发生错误", "err", err)
|
||||
}
|
||||
errQuit <- err
|
||||
}()
|
||||
|
||||
// 等待退出信号
|
||||
osQuit := make(chan os.Signal)
|
||||
signal.Notify(osQuit, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
select {
|
||||
case <-osQuit:
|
||||
slog.Info("服务关闭")
|
||||
case <-errQuit:
|
||||
slog.Error("服务异常退出")
|
||||
}
|
||||
|
||||
// 等待子服务退出
|
||||
cancel()
|
||||
|
||||
timeout, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
wgCh := utils.ChanWgWait(timeout, &wg)
|
||||
|
||||
select {
|
||||
case <-timeout.Done():
|
||||
slog.Error("关闭超时,强制关闭")
|
||||
case <-wgCh:
|
||||
slog.Info("服务已退出")
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
|
||||
Reference in New Issue
Block a user