From bf14282e40668264fdcd1e3fc4fd1959a51ea266 Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 15 Apr 2026 18:26:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(server):=20=E6=B7=BB=E5=8A=A0=E9=AB=98?= =?UTF-8?q?=E5=B9=B6=E5=8F=91=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ServerConfig 新增 Concurrency/ReadBufferSize/WriteBufferSize/ReduceMemoryUsage 配置 - defaults.go 设置默认值:256K 并发连接、16KB 缓冲区 - server.go 在 singleMode 和 vhostMode 中应用配置 Co-Authored-By: Claude Opus 4.6 --- internal/config/config.go | 6 ++++++ internal/config/defaults.go | 10 ++++++++++ internal/server/server.go | 10 ++++++++++ 3 files changed, 26 insertions(+) diff --git a/internal/config/config.go b/internal/config/config.go index 02dcc94..b2f3a11 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -199,6 +199,12 @@ type ServerConfig struct { MaxConnsPerIP int `yaml:"max_conns_per_ip"` IdleTimeout time.Duration `yaml:"idle_timeout"` WriteTimeout time.Duration `yaml:"write_timeout"` + + // 高并发优化配置(可选,未配置时使用默认值) + Concurrency int `yaml:"concurrency"` // 最大并发连接数(默认 256 * 1024) + ReadBufferSize int `yaml:"read_buffer_size"` // 读缓冲区大小(字节,默认 16KB) + WriteBufferSize int `yaml:"write_buffer_size"` // 写缓冲区大小(字节,默认 16KB) + ReduceMemoryUsage bool `yaml:"reduce_memory_usage"` // 是否优先减少内存使用(默认 false,优先性能) } // StaticConfig 静态文件服务配置。 diff --git a/internal/config/defaults.go b/internal/config/defaults.go index d28e94d..6d544f1 100644 --- a/internal/config/defaults.go +++ b/internal/config/defaults.go @@ -45,6 +45,11 @@ func DefaultConfig() *Config { IdleTimeout: 120 * time.Second, MaxConnsPerIP: 1000, MaxRequestsPerConn: 10000, + // 高并发优化配置默认值 + Concurrency: 256 * 1024, // 256K 最大并发连接 + ReadBufferSize: 16 * 1024, // 16KB 读缓冲 + WriteBufferSize: 16 * 1024, // 16KB 写缓冲 + ReduceMemoryUsage: false, // 优先性能 CacheAPI: &CacheAPIConfig{ Enabled: false, Path: "/_cache/purge", @@ -255,6 +260,11 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) { fmt.Fprintf(&buf, " max_conns_per_ip: %d # 每 IP 最大连接数(0 表示不限制)\n", cfg.Servers[0].MaxConnsPerIP) fmt.Fprintf(&buf, " max_requests_per_conn: %d # 每连接最大请求数(0 表示不限制)\n", cfg.Servers[0].MaxRequestsPerConn) fmt.Fprintf(&buf, " client_max_body_size: \"1MB\" # 请求体大小限制(支持单位: b, kb, mb, gb)\n") + buf.WriteString(" # 高并发优化配置(可选,未配置时使用默认值)\n") + fmt.Fprintf(&buf, " # concurrency: %d # 最大并发连接数(默认 %d)\n", cfg.Servers[0].Concurrency, cfg.Servers[0].Concurrency) + fmt.Fprintf(&buf, " # read_buffer_size: %d # 读缓冲区大小(字节,默认 %d)\n", cfg.Servers[0].ReadBufferSize, cfg.Servers[0].ReadBufferSize) + fmt.Fprintf(&buf, " # write_buffer_size: %d # 写缓冲区大小(字节,默认 %d)\n", cfg.Servers[0].WriteBufferSize, cfg.Servers[0].WriteBufferSize) + fmt.Fprintf(&buf, " # reduce_memory_usage: %v # 是否优先减少内存使用(默认 %v)\n", cfg.Servers[0].ReduceMemoryUsage, cfg.Servers[0].ReduceMemoryUsage) buf.WriteString("\n") // cache_api 配置 diff --git a/internal/server/server.go b/internal/server/server.go index c12b695..ed1b2b1 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -512,6 +512,11 @@ func (s *Server) startSingleMode() error { MaxConnsPerIP: serverCfg.MaxConnsPerIP, MaxRequestsPerConn: serverCfg.MaxRequestsPerConn, CloseOnShutdown: true, + // 高并发优化配置 + Concurrency: serverCfg.Concurrency, + ReadBufferSize: serverCfg.ReadBufferSize, + WriteBufferSize: serverCfg.WriteBufferSize, + ReduceMemoryUsage: serverCfg.ReduceMemoryUsage, } s.running = true @@ -632,6 +637,11 @@ func (s *Server) startVHostMode() error { MaxConnsPerIP: serverCfg.MaxConnsPerIP, MaxRequestsPerConn: serverCfg.MaxRequestsPerConn, CloseOnShutdown: true, + // 高并发优化配置 + Concurrency: serverCfg.Concurrency, + ReadBufferSize: serverCfg.ReadBufferSize, + WriteBufferSize: serverCfg.WriteBufferSize, + ReduceMemoryUsage: serverCfg.ReduceMemoryUsage, } s.running = true