64 lines
1.6 KiB
Go
64 lines
1.6 KiB
Go
package client
|
||
|
||
import (
|
||
"net/http"
|
||
"time"
|
||
)
|
||
|
||
// HTTPClientConfig HTTP客户端配置
|
||
type HTTPClientConfig struct {
|
||
Timeout time.Duration
|
||
MaxIdleConns int
|
||
MaxIdleConnsPerHost int
|
||
MaxConnsPerHost int
|
||
}
|
||
|
||
// DefaultHTTPClientConfig 默认HTTP客户端配置
|
||
var DefaultHTTPClientConfig = HTTPClientConfig{
|
||
Timeout: 30 * time.Second,
|
||
MaxIdleConns: 100,
|
||
MaxIdleConnsPerHost: 50,
|
||
MaxConnsPerHost: 0, // 0表示不限制
|
||
}
|
||
|
||
// NewHTTPClient 创建优化的HTTP客户端
|
||
func NewHTTPClient(config HTTPClientConfig) *http.Client {
|
||
transport := &http.Transport{
|
||
// 连接池配置
|
||
MaxIdleConns: config.MaxIdleConns,
|
||
MaxIdleConnsPerHost: config.MaxIdleConnsPerHost,
|
||
MaxConnsPerHost: config.MaxConnsPerHost,
|
||
IdleConnTimeout: 90 * time.Second,
|
||
|
||
// 性能优化
|
||
DisableCompression: false,
|
||
DisableKeepAlives: false,
|
||
ForceAttemptHTTP2: true, // 启用HTTP/2
|
||
|
||
// 超时配置
|
||
TLSHandshakeTimeout: 10 * time.Second,
|
||
ResponseHeaderTimeout: 30 * time.Second,
|
||
ExpectContinueTimeout: 1 * time.Second,
|
||
|
||
// 缓冲大小
|
||
WriteBufferSize: 32 * 1024, // 32KB写缓冲
|
||
ReadBufferSize: 32 * 1024, // 32KB读缓冲
|
||
}
|
||
|
||
return &http.Client{
|
||
Timeout: config.Timeout,
|
||
Transport: transport,
|
||
}
|
||
}
|
||
|
||
// NewLLMHTTPClient 创建用于LLM的HTTP客户端(连接池更大)
|
||
func NewLLMHTTPClient(timeout time.Duration) *http.Client {
|
||
config := HTTPClientConfig{
|
||
Timeout: timeout,
|
||
MaxIdleConns: 200,
|
||
MaxIdleConnsPerHost: 100,
|
||
MaxConnsPerHost: 0,
|
||
}
|
||
return NewHTTPClient(config)
|
||
}
|