Valari getur snúist fullkomlega og velur samt alltaf fyrsta proxyið. Mistakið er að búa óvart til nýjan valara fyrir hverja beiðni, sem núllstillir teljarann áður en hann hefur annað val.

Byggðu valarann einu sinni og haltu honum með flutningnum. HTTP-proxylistinn getur veitt opinberar HTTP-frambjóðendur fyrir URL-mengið þegar beiðnirnar leyfa opinbera milliliði. Byrjaðu á þegar staðfestum, ekki tómum lista af proxy-URL-slóðum:

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
    }
}

Umliggjandi forritið verður að hafna tómum lista, staðfesta URL-slóðirnar og nota venjulegu innflutningana net/http, net/url og sync. Listinn ætti að vera óbreytilegur meðan þessi valari notar hann, eða vera skipt út fyrir sérstaka samstillta hönnun.

Tengdu skilaða fallið við eitt varðveitt http.Transport. Mutexið verndar valröðina milli samhliða endurkalla. Það krefst ekki þess að lás sé haldið meðan hæg netbeiðni klárast.

Ekki eyða leið bara til að prenta hana

Að kalla valarann aftur fyrir greiningarskilaboð færir teljarann aftur áfram. Sá úttakur lýsir kannski næsta frambjóðanda í stað þess sem beiðnin sem þú ert að rannsaka notaði. Skráðu valið inni í raunverulegu endurkallinu með öruggum auðkenni endapunkts.

Endurkall er ekki sönnun þess að beiðni hafi verið afhent með góðum árangri. Endurstefnur eða viðbótartilraunir í flutningi geta flækt einfalda forsendu „eitt forritskall, eitt val“. Ef vinnuflæði verður að halda einni leið í gegnum nokkrar aðgerðir, veldu þá leið við mörk vinnuflæðisins í stað þess að nota alheims snúningsendurkall.

Hringsnúningur lofar heldur ekki aðskildum opinberum útgöngum. Hann áætlar endapunkta. Endanleg sjálfsmynd er áfram eiginleiki þeirrar leiðar sem hver endapunktur veitir.

Tengdir greinar