diff --git a/CHANGELOG.md b/CHANGELOG.md index b20e93a..8361a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,12 @@ - FIX: 修正非预期的header操作行为 - CHANGE: 合并header相关逻辑, 避免多次操作 - CHANGE: 对editor模式下的input进行处置, 增加隐式关闭处理 +- CHANGE: 增加`netlib`配置项 + +25w29b - 2025-04-19 +--- +- PRE-RELEASE: 此版本是v3.0.3预发布版本,请勿在生产环境中使用; +- CHANGE: 增加`netlib`配置项 25w29a - 2025-04-17 --- diff --git a/DEV-VERSION b/DEV-VERSION index f4abfe2..c307029 100644 --- a/DEV-VERSION +++ b/DEV-VERSION @@ -1 +1 @@ -25w29a \ No newline at end of file +25w29b \ No newline at end of file diff --git a/config/config.go b/config/config.go index 1bf1bdc..e737a63 100644 --- a/config/config.go +++ b/config/config.go @@ -22,15 +22,20 @@ type Config struct { /* [server] -host = "0.0.0.0" # 监听地址 -port = 8080 # 监听端口 -sizeLimit = 125 # 125MB -H2C = true # 是否开启H2C传输 +host = "0.0.0.0" +port = 8080 +netlib = "netpoll" # "netpoll" / "std" "standard" "net/http" "net" +sizeLimit = 125 # MB +memLimit = 0 # MB +H2C = true +cors = "*" # "*"/"" -> "*" ; "nil" -> "" ; +debug = false */ type ServerConfig struct { Port int `toml:"port"` Host string `toml:"host"` + NetLib string `toml:"netlib"` SizeLimit int `toml:"sizeLimit"` MemLimit int64 `toml:"memLimit"` H2C bool `toml:"H2C"` @@ -180,6 +185,7 @@ func DefaultConfig() *Config { Server: ServerConfig{ Port: 8080, Host: "0.0.0.0", + NetLib: "netpoll", SizeLimit: 125, MemLimit: 0, H2C: true, diff --git a/config/config.toml b/config/config.toml index 92b81f8..ac1ee59 100644 --- a/config/config.toml +++ b/config/config.toml @@ -1,6 +1,7 @@ [server] host = "0.0.0.0" port = 8080 +netlib = "netpoll" # "netpoll" / "std" "standard" "net/http" "net" sizeLimit = 125 # MB memLimit = 0 # MB H2C = true diff --git a/deploy/config.toml b/deploy/config.toml index a25acf1..b88e30b 100644 --- a/deploy/config.toml +++ b/deploy/config.toml @@ -1,6 +1,7 @@ [server] host = "127.0.0.1" port = 8080 +netlib = "netpoll" # "netpoll" / "std" "standard" "net/http" "net" sizeLimit = 125 # MB memLimit = 0 # MB H2C = true diff --git a/docs/config.md b/docs/config.md index ccd1ce2..bad8c65 100644 --- a/docs/config.md +++ b/docs/config.md @@ -12,6 +12,7 @@ [server] host = "0.0.0.0" port = 8080 +netlib = "netpoll" # "netpoll" / "std" "standard" "net/http" "net" sizeLimit = 125 # MB memLimit = 0 # MB H2C = true @@ -83,6 +84,10 @@ url = "socks5://127.0.0.1:1080" # "http://127.0.0.1:7890" * 类型: 整数 (`int`) * 默认值: `8080` * 说明: 设置 `ghproxy` 监听的端口号。 + * `netlib`: 底层网络库。 + * 类型: 字符串 (`string`) + * 默认值: `""` (HertZ默认处置) + * 说明: `"std"` `"standard"` `"net/http"` `"net"` 均会被设置为go标准库`net/http`, 设置为`"netpoll"`或`""`会由`HertZ`默认逻辑处理 * `sizeLimit`: 请求体大小限制。 * 类型: 整数 (`int`) * 默认值: `125` (MB) diff --git a/main.go b/main.go index 6baac20..f915fcc 100644 --- a/main.go +++ b/main.go @@ -19,15 +19,14 @@ import ( "ghproxy/rate" "github.com/WJQSERVER-STUDIO/go-utils/logger" + "github.com/hertz-contrib/http2/factory" "github.com/cloudwego/hertz/pkg/app" "github.com/cloudwego/hertz/pkg/app/middlewares/server/recovery" "github.com/cloudwego/hertz/pkg/app/server" "github.com/cloudwego/hertz/pkg/common/adaptor" "github.com/cloudwego/hertz/pkg/common/hlog" - "github.com/cloudwego/hertz/pkg/network/standard" - "github.com/hertz-contrib/http2/factory" _ "net/http/pprof" ) @@ -362,33 +361,47 @@ func init() { } func main() { - // 如果 showVersion 为 true,则在 init 阶段已退出,这里直接返回 if showVersion || showHelp { return } logDebug("Run Mode: %s", runMode) - // 确保在程序配置加载且非版本显示模式下执行 if cfg == nil { fmt.Println("Config not loaded, exiting.") - return // 如果配置未加载,则不继续执行 + return } addr := fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port) - - if cfg.Server.H2C { - r = server.New( - server.WithHostPorts(addr), - server.WithH2C(true), - // server.WithALPN(true), - server.WithTransport(standard.NewTransporter), - ) - r.AddProtocol("h2", factory.NewServerFactory()) + if cfg.Server.NetLib == "std" || cfg.Server.NetLib == "standard" || cfg.Server.NetLib == "net" || cfg.Server.NetLib == "net/http" { + if cfg.Server.H2C { + r = server.New( + server.WithH2C(true), + server.WithHostPorts(addr), + server.WithTransport(standard.NewTransporter), + ) + r.AddProtocol("h2", factory.NewServerFactory()) + } else { + r = server.New( + server.WithHostPorts(addr), + server.WithTransport(standard.NewTransporter), + ) + } + } else if cfg.Server.NetLib == "netpoll" || cfg.Server.NetLib == "" { + if cfg.Server.H2C { + r = server.New( + server.WithH2C(true), + server.WithHostPorts(addr), + ) + r.AddProtocol("h2", factory.NewServerFactory()) + } else { + r = server.New( + server.WithHostPorts(addr), + ) + } } else { - r = server.New( - server.WithHostPorts(addr), - server.WithTransport(standard.NewTransporter), - ) + logError("Invalid NetLib: %s", cfg.Server.NetLib) + fmt.Printf("Invalid NetLib: %s\n", cfg.Server.NetLib) + os.Exit(1) } // 添加Recovery中间件