diff --git a/config/config.go b/config/config.go index 8aa613f..bc43ed3 100644 --- a/config/config.go +++ b/config/config.go @@ -76,6 +76,13 @@ func (config *RequestConfig) GetValidDodosCountForProxies() int { 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 { Method string `json:"method" validate:"http_method"` // custom validations: http_method URL string `json:"url" validate:"http_url,required"` diff --git a/requests/client.go b/requests/client.go index 65816f8..5e33378 100644 --- a/requests/client.go +++ b/requests/client.go @@ -33,13 +33,15 @@ func getClientDoFunc( timeout time.Duration, proxies []config.Proxy, dodosCount int, + maxConns uint, yes bool, URL *url.URL, ) ClientDoFunc { isTLS := URL.Scheme == "https" + if len(proxies) > 0 { activeProxyClients := getActiveProxyClients( - ctx, proxies, timeout, dodosCount, URL, + ctx, proxies, timeout, dodosCount, maxConns, URL, ) if ctx.Err() != nil { return nil @@ -71,6 +73,7 @@ func getClientDoFunc( fmt.Println() if activeProxyClientsCount == 0 { client := &fasthttp.HostClient{ + MaxConns: int(maxConns), IsTLS: isTLS, Addr: URL.Host, MaxIdleConnDuration: timeout, @@ -91,6 +94,7 @@ func getClientDoFunc( } client := &fasthttp.HostClient{ + MaxConns: int(maxConns), IsTLS: isTLS, Addr: URL.Host, MaxIdleConnDuration: timeout, @@ -111,6 +115,7 @@ func getActiveProxyClients( proxies []config.Proxy, timeout time.Duration, dodosCount int, + maxConns uint, URL *url.URL, ) []*fasthttp.HostClient { activeProxyClientsArray := make([][]*fasthttp.HostClient, dodosCount) @@ -140,6 +145,7 @@ func getActiveProxyClients( timeout, &activeProxyClientsArray[i], increase, + maxConns, URL, &wg, ) @@ -171,6 +177,7 @@ func findActiveProxyClients( timeout time.Duration, activeProxyClients *[]*fasthttp.HostClient, increase chan<- int64, + maxConns uint, URL *url.URL, wg *sync.WaitGroup, ) { @@ -227,6 +234,7 @@ func findActiveProxyClients( *activeProxyClients = append( *activeProxyClients, &fasthttp.HostClient{ + MaxConns: int(maxConns), IsTLS: isTLS, Addr: addr, Dial: dialFunc, diff --git a/requests/run.go b/requests/run.go index 1989caa..7c67247 100644 --- a/requests/run.go +++ b/requests/run.go @@ -28,6 +28,7 @@ func Run(ctx context.Context, requestConfig *config.RequestConfig) (Responses, e requestConfig.Timeout, requestConfig.Proxies, requestConfig.GetValidDodosCountForProxies(), + requestConfig.GetMaxConns(fasthttp.DefaultMaxConnsPerHost), requestConfig.Yes, requestConfig.URL, )