From 2bc13dd03b68876a51ff1fa1d97a774d633618a0 Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 15 Apr 2026 12:48:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app):=20=E6=94=B9=E7=94=A8=20Servers[0?= =?UTF-8?q?]=20=E6=9B=BF=E4=BB=A3=E6=97=A7=E7=89=88=20Server=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 cfg.Server 改为 cfg.Servers[0],适配多服务器配置格式。 HTTP/2、HTTP/3 等子模块配置同步更新。 Co-Authored-By: Claude Opus 4.6 --- internal/app/app.go | 14 +++++++------- internal/app/app_test.go | 22 +++++++++++----------- internal/app/app_windows.go | 14 +++++++------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/internal/app/app.go b/internal/app/app.go index e5117b4..8bc2e60 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -178,7 +178,7 @@ func (a *App) Run() int { }) } } else { - a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Server.Listen}) + a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Servers[0].Listen}) } // 创建 DNS 解析器(如果启用) @@ -243,7 +243,7 @@ func (a *App) Run() int { } // 创建并启动 HTTP/3 服务器(如果启用) - if a.cfg.HTTP3.Enabled && a.cfg.Server.SSL.Cert != "" { + if a.cfg.HTTP3.Enabled && a.cfg.Servers[0].SSL.Cert != "" { tlsConfig, err := a.srv.GetTLSConfig() if err != nil { a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/3") @@ -263,21 +263,21 @@ func (a *App) Run() int { } // 创建并启动 HTTP/2 服务器(如果启用且配置了 TLS) - if a.cfg.Server.SSL.HTTP2.Enabled && a.cfg.Server.SSL.Cert != "" { + if a.cfg.Servers[0].SSL.HTTP2.Enabled && a.cfg.Servers[0].SSL.Cert != "" { tlsConfig, err := a.srv.GetTLSConfig() if err != nil { a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/2") } else { // 创建 HTTP/2 服务器,共享同一个 handler - a.http2Srv, err = http2.NewServer(&a.cfg.Server.SSL.HTTP2, a.srv.GetHandler(), tlsConfig) + a.http2Srv, err = http2.NewServer(&a.cfg.Servers[0].SSL.HTTP2, a.srv.GetHandler(), tlsConfig) if err != nil { a.logger.Error().Err(err).Msg("创建 HTTP/2 服务器失败") } else { go func() { a.logger.LogStartup("HTTP/2 服务器启动中", map[string]string{ - "listen": a.cfg.Server.Listen, - "max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Server.SSL.HTTP2.MaxConcurrentStreams), - "push_enabled": fmt.Sprintf("%t", a.cfg.Server.SSL.HTTP2.PushEnabled), + "listen": a.cfg.Servers[0].Listen, + "max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Servers[0].SSL.HTTP2.MaxConcurrentStreams), + "push_enabled": fmt.Sprintf("%t", a.cfg.Servers[0].SSL.HTTP2.PushEnabled), }) // HTTP/2 服务器使用与主服务器相同的监听器 // 通过 ALPN 协商自动处理协议选择 diff --git a/internal/app/app_test.go b/internal/app/app_test.go index 67a7bfe..c673f2b 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -246,7 +246,7 @@ func TestRun(t *testing.T) { if err != nil { t.Errorf("读取生成的配置文件失败: %v", err) } else if !strings.Contains(string(data), "servers:") { - t.Errorf("生成的配置文件应包含 'server:', 实际内容: %s", string(data)[:100]) + t.Errorf("生成的配置文件应包含 'servers:', 实际内容: %s", string(data)[:100]) } } }) @@ -420,8 +420,8 @@ func TestHandleSignal_SIGHUP(t *testing.T) { tmpDir := t.TempDir() cfgPath := filepath.Join(tmpDir, "config.yaml") cfgContent := ` -server: - listen: ":8080" +servers: + - listen: ":8080" logging: error: level: "info" @@ -525,8 +525,8 @@ func TestReloadConfig_Success(t *testing.T) { tmpDir := t.TempDir() cfgPath := filepath.Join(tmpDir, "config.yaml") cfgContent := ` -server: - listen: ":9090" +servers: + - listen: ":9090" logging: error: level: "debug" @@ -691,8 +691,8 @@ func TestReloadConfig_WithValidConfig(t *testing.T) { // 创建第一个配置 cfgPath1 := filepath.Join(tmpDir, "config1.yaml") cfgContent1 := ` -server: - listen: ":8080" +servers: + - listen: ":8080" logging: error: level: "info" @@ -704,8 +704,8 @@ logging: // 创建第二个配置 cfgPath2 := filepath.Join(tmpDir, "config2.yaml") cfgContent2 := ` -server: - listen: ":9090" +servers: + - listen: ":9090" logging: error: level: "debug" @@ -741,8 +741,8 @@ func TestHandleSignal_AllSignals(t *testing.T) { tmpDir := t.TempDir() cfgPath := filepath.Join(tmpDir, "config.yaml") cfgContent := ` -server: - listen: ":8080" +servers: + - listen: ":8080" logging: error: level: "info" diff --git a/internal/app/app_windows.go b/internal/app/app_windows.go index 740a924..c4f50b6 100644 --- a/internal/app/app_windows.go +++ b/internal/app/app_windows.go @@ -127,7 +127,7 @@ func (a *App) Run() int { } a.logger.LogStartup("配置加载成功", map[string]string{"config_path": a.cfgPath}) - a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Server.Listen}) + a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Servers[0].Listen}) if a.cfg.Resolver.Enabled { a.resv = resolver.New(&a.cfg.Resolver) @@ -175,7 +175,7 @@ func (a *App) Run() int { } // HTTP/3 服务器 - if a.cfg.HTTP3.Enabled && a.cfg.Server.SSL.Cert != "" { + if a.cfg.HTTP3.Enabled && a.cfg.Servers[0].SSL.Cert != "" { tlsConfig, err := a.srv.GetTLSConfig() if err != nil { a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/3") @@ -195,20 +195,20 @@ func (a *App) Run() int { } // HTTP/2 服务器 - if a.cfg.Server.SSL.HTTP2.Enabled && a.cfg.Server.SSL.Cert != "" { + if a.cfg.Servers[0].SSL.HTTP2.Enabled && a.cfg.Servers[0].SSL.Cert != "" { tlsConfig, err := a.srv.GetTLSConfig() if err != nil { a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/2") } else { - a.http2Srv, err = http2.NewServer(&a.cfg.Server.SSL.HTTP2, a.srv.GetHandler(), tlsConfig) + a.http2Srv, err = http2.NewServer(&a.cfg.Servers[0].SSL.HTTP2, a.srv.GetHandler(), tlsConfig) if err != nil { a.logger.Error().Err(err).Msg("创建 HTTP/2 服务器失败") } else { go func() { a.logger.LogStartup("HTTP/2 服务器启动中", map[string]string{ - "listen": a.cfg.Server.Listen, - "max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Server.SSL.HTTP2.MaxConcurrentStreams), - "push_enabled": fmt.Sprintf("%t", a.cfg.Server.SSL.HTTP2.PushEnabled), + "listen": a.cfg.Servers[0].Listen, + "max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Servers[0].SSL.HTTP2.MaxConcurrentStreams), + "push_enabled": fmt.Sprintf("%t", a.cfg.Servers[0].SSL.HTTP2.PushEnabled), }) listeners := a.srv.GetListeners() if len(listeners) > 0 {