From e9731a70ac85c39b8169f273f458cf05207d1893 Mon Sep 17 00:00:00 2001 From: Aykhan Shahsuvarov Date: Tue, 10 Sep 2024 18:12:53 +0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Set=20the=20MaxConns=20attribute?= =?UTF-8?q?=20on=20HostClients=20/=20fix=20#21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/config.go | 7 +++++++ requests/client.go | 10 +++++++++- requests/run.go | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) 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, )