🔨 Set the MaxConns attribute on HostClients / fix #21

This commit is contained in:
Aykhan Shahsuvarov 2024-09-10 18:12:53 +04:00
parent 60335f7726
commit e9731a70ac
3 changed files with 17 additions and 1 deletions

View File

@ -76,6 +76,13 @@ func (config *RequestConfig) GetValidDodosCountForProxies() int {
return min(config.DodosCount, len(config.Proxies), MaxDodosCountForProxies) return min(config.DodosCount, len(config.Proxies), MaxDodosCountForProxies)
} }
func (config *RequestConfig) GetMaxConns(minConns uint) uint {
maxConns := max(
minConns, uint(config.GetValidDodosCountForRequests()),
)
return ((maxConns * 50 / 100) + maxConns)
}
type Config struct { type Config struct {
Method string `json:"method" validate:"http_method"` // custom validations: http_method Method string `json:"method" validate:"http_method"` // custom validations: http_method
URL string `json:"url" validate:"http_url,required"` URL string `json:"url" validate:"http_url,required"`

View File

@ -33,13 +33,15 @@ func getClientDoFunc(
timeout time.Duration, timeout time.Duration,
proxies []config.Proxy, proxies []config.Proxy,
dodosCount int, dodosCount int,
maxConns uint,
yes bool, yes bool,
URL *url.URL, URL *url.URL,
) ClientDoFunc { ) ClientDoFunc {
isTLS := URL.Scheme == "https" isTLS := URL.Scheme == "https"
if len(proxies) > 0 { if len(proxies) > 0 {
activeProxyClients := getActiveProxyClients( activeProxyClients := getActiveProxyClients(
ctx, proxies, timeout, dodosCount, URL, ctx, proxies, timeout, dodosCount, maxConns, URL,
) )
if ctx.Err() != nil { if ctx.Err() != nil {
return nil return nil
@ -71,6 +73,7 @@ func getClientDoFunc(
fmt.Println() fmt.Println()
if activeProxyClientsCount == 0 { if activeProxyClientsCount == 0 {
client := &fasthttp.HostClient{ client := &fasthttp.HostClient{
MaxConns: int(maxConns),
IsTLS: isTLS, IsTLS: isTLS,
Addr: URL.Host, Addr: URL.Host,
MaxIdleConnDuration: timeout, MaxIdleConnDuration: timeout,
@ -91,6 +94,7 @@ func getClientDoFunc(
} }
client := &fasthttp.HostClient{ client := &fasthttp.HostClient{
MaxConns: int(maxConns),
IsTLS: isTLS, IsTLS: isTLS,
Addr: URL.Host, Addr: URL.Host,
MaxIdleConnDuration: timeout, MaxIdleConnDuration: timeout,
@ -111,6 +115,7 @@ func getActiveProxyClients(
proxies []config.Proxy, proxies []config.Proxy,
timeout time.Duration, timeout time.Duration,
dodosCount int, dodosCount int,
maxConns uint,
URL *url.URL, URL *url.URL,
) []*fasthttp.HostClient { ) []*fasthttp.HostClient {
activeProxyClientsArray := make([][]*fasthttp.HostClient, dodosCount) activeProxyClientsArray := make([][]*fasthttp.HostClient, dodosCount)
@ -140,6 +145,7 @@ func getActiveProxyClients(
timeout, timeout,
&activeProxyClientsArray[i], &activeProxyClientsArray[i],
increase, increase,
maxConns,
URL, URL,
&wg, &wg,
) )
@ -171,6 +177,7 @@ func findActiveProxyClients(
timeout time.Duration, timeout time.Duration,
activeProxyClients *[]*fasthttp.HostClient, activeProxyClients *[]*fasthttp.HostClient,
increase chan<- int64, increase chan<- int64,
maxConns uint,
URL *url.URL, URL *url.URL,
wg *sync.WaitGroup, wg *sync.WaitGroup,
) { ) {
@ -227,6 +234,7 @@ func findActiveProxyClients(
*activeProxyClients = append( *activeProxyClients = append(
*activeProxyClients, *activeProxyClients,
&fasthttp.HostClient{ &fasthttp.HostClient{
MaxConns: int(maxConns),
IsTLS: isTLS, IsTLS: isTLS,
Addr: addr, Addr: addr,
Dial: dialFunc, Dial: dialFunc,

View File

@ -28,6 +28,7 @@ func Run(ctx context.Context, requestConfig *config.RequestConfig) (Responses, e
requestConfig.Timeout, requestConfig.Timeout,
requestConfig.Proxies, requestConfig.Proxies,
requestConfig.GetValidDodosCountForProxies(), requestConfig.GetValidDodosCountForProxies(),
requestConfig.GetMaxConns(fasthttp.DefaultMaxConnsPerHost),
requestConfig.Yes, requestConfig.Yes,
requestConfig.URL, requestConfig.URL,
) )