feat: 优化代理服务

This commit is contained in:
tbphp
2025-07-11 17:11:00 +08:00
parent 6ffbb7e9a1
commit 1368792aa0
16 changed files with 249 additions and 262 deletions

View File

@@ -20,6 +20,9 @@ type Config struct {
DisableCompression bool
WriteBufferSize int
ReadBufferSize int
ForceAttemptHTTP2 bool
TLSHandshakeTimeout time.Duration
ExpectContinueTimeout time.Duration
}
// HTTPClientManager manages the lifecycle of HTTP clients.
@@ -65,14 +68,14 @@ func (m *HTTPClientManager) GetClient(config *Config) *http.Client {
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: config.ConnectTimeout,
KeepAlive: 30 * time.Second, // KeepAlive is a good default
KeepAlive: 30 * time.Second,
}).DialContext,
ForceAttemptHTTP2: true,
ForceAttemptHTTP2: config.ForceAttemptHTTP2,
MaxIdleConns: config.MaxIdleConns,
MaxIdleConnsPerHost: config.MaxIdleConnsPerHost,
IdleConnTimeout: config.IdleConnTimeout,
TLSHandshakeTimeout: 10 * time.Second, // A reasonable default
ExpectContinueTimeout: 1 * time.Second, // A reasonable default
TLSHandshakeTimeout: config.TLSHandshakeTimeout,
ExpectContinueTimeout: config.ExpectContinueTimeout,
ResponseHeaderTimeout: config.ResponseHeaderTimeout,
DisableCompression: config.DisableCompression,
WriteBufferSize: config.WriteBufferSize,
@@ -91,7 +94,7 @@ func (m *HTTPClientManager) GetClient(config *Config) *http.Client {
// getFingerprint generates a unique string representation of the client configuration.
func (c *Config) getFingerprint() string {
return fmt.Sprintf(
"ct:%.0fs|rt:%.0fs|it:%.0fs|mic:%d|mich:%d|rht:%.0fs|dc:%t|wbs:%d|rbs:%d",
"ct:%.0fs|rt:%.0fs|it:%.0fs|mic:%d|mich:%d|rht:%.0fs|dc:%t|wbs:%d|rbs:%d|fh2:%t|tlst:%.0fs|ect:%.0fs",
c.ConnectTimeout.Seconds(),
c.RequestTimeout.Seconds(),
c.IdleConnTimeout.Seconds(),
@@ -101,5 +104,8 @@ func (c *Config) getFingerprint() string {
c.DisableCompression,
c.WriteBufferSize,
c.ReadBufferSize,
c.ForceAttemptHTTP2,
c.TLSHandshakeTimeout.Seconds(),
c.ExpectContinueTimeout.Seconds(),
)
}