Një përzgjedhës mund të rrotullohet në mënyrë të përsosur dhe prapë të vazhdojë të zgjedhë proxy-n e parë. Gabimi është krijimi aksidental i një përzgjedhësi të ri për çdo kërkesë, i cili e rivendos numëruesin përpara se të ketë një zgjedhje të dytë.

Ndërtojeni përzgjedhësin një herë dhe mbajeni me transportin. Lista e proxy-ve HTTP mund të furnizojë kandidatë publikë HTTP për grupin e URL-ve kur kërkesat lejojnë ndërmjetës publikë. Filloni me një listë URL-sh proxy të vlefshmëruar tashmë dhe jo të zbrazët:

func rotatingProxy(urls []*url.URL) func(*http.Request) (*url.URL, error) {
    var mu sync.Mutex
    next := 0
    return func(*http.Request) (*url.URL, error) {
        mu.Lock()
        selected := urls[next]
        next = (next + 1) % len(urls)
        mu.Unlock()
        return selected, nil
    }
}

Aplikacioni përreth duhet të refuzojë një listë të zbrazët, të vlefshmërojë URL-të dhe të përdorë importet normale net/http, net/url dhe sync. Lista duhet të mbetet e pandryshueshme ndërsa ky përzgjedhës e përdor atë, ose të zëvendësohet përmes një dizajni të sinkronizuar veçmas.

Lidhni funksionin e kthyer me një http.Transport të mbajtur. Mutex-i mbron sekuencën e përzgjedhjes midis thirrjeve të njëkohshme. Nuk kërkon mbajtjen e një bllokimi ndërsa përfundon një kërkesë e ngadaltë rrjeti.

Mos konsumoni një rrugë vetëm për ta printuar

Thirrja përsëri e përzgjedhësit për një mesazh diagnostikimi e shtyn numëruesin përsëri. Ai dalje mund të përshkruajë kandidatin tjetër në vend të kandidatit të përdorur nga kërkesa që po hetoni. Regjistroni zgjedhjen brenda thirrjes reale me një identifikues të sigurt pikëmbërritjeje.

Thirrja e një kthimi nuk është provë që një kërkesë u dorëzua me sukses. Ridrejtimet ose përpjekjet shtesë të transportit mund ta ndërlikojnë supozimin e thjeshtë «një thirrje aplikacioni, një zgjedhje». Nëse një rrjedhë pune duhet të mbajë një rrugë përgjatë disa operacioneve, zgjidhni atë rrugë në kufirin e rrjedhës së punës në vend që të përdorni një kthim rrotullues global.

Rrotullimi gjithashtu nuk premton dalje publike të ndryshme. Ai planifikon pikëmbërritje. Identiteti përfundimtar mbetet një veti e shtegut që furnizon çdo pikëmbërritje.

Artikuj të ngjashëm