Go-ko proxy hautatzaile zirkular partekatua
Mantendu Go proxy hautatzailea bizirik eskaeren artean, babestu hautapen-egoera partekatua eta bereizi bide bat hautatzea haren irteera behatzetik.
Hautatzaile batek primeran txanda dezake eta hala ere lehen proxya hautatzen jarrai dezake. Akatsa eskaera bakoitzeko hautatzaile berri bat nahi gabe sortzea da; horrek bere zenbakitzailea berrezartzen du bigarren hautapen bat egin baino lehen.
Eraiki hautatzailea behin eta eutsi transportarekin batera. HTTP proxy zerrendak HTTP hautagai publikoak eman ditzake URL multzorako, eskaerek bitartekari publikoak onartzen dituztenean. Hasi jada balidatutako proxy URL zerrenda ez-huts batekin:
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
}
}
Inguruko aplikazioak zerrenda hutsa baztertu, URLak balidatu eta ohiko net/http, net/url eta sync inportazioak erabili behar ditu. Zerrendak aldaezin jarraitu beharko luke hautatzaile honek erabiltzen duen bitartean, edo bereiz sinkronizatutako diseinu baten bidez ordezkatu beharko litzateke.
Lotu itzulitako funtzioa atxikitako http.Transport bakar batera. Mutexak hautapen-sekuentzia babesten du aldi bereko callback-en artean. Ez du blokeoa eusten ari beharrik eskaera sareko eskaera geldo bat amaitzen den bitartean.
Ez kontsumitu bide bat inprimatzeko soilik
Hautatzailea berriro deitzeak mezu diagnostiko baterako zenbakitzailea berriro aurreratzen du. Irteera horrek hurrengo hautagaia deskriba dezake, ikertzen ari zaren eskaerak erabili zuen hautagaia ordez. Erregistratu hautapena benetako callbackaren barruan, amaiera-puntuaren identifikatzaile seguru batekin.
Callback bat deitzea ez da eskaera bat behar bezala entregatu delako froga. Birbideratzeek edo transportaren saiakera gehigarriek «aplikazio-dei bat, hautapen bat» suposizio sinplea zaildu dezakete. Lan-fluxu batek eragiketa batzuetan zehar bide bat mantendu behar badu, hautatu bide hori lan-fluxuaren muga-mugan callback birakari global bat erabili beharrean.
Txandakatze zirkularrak ez du irteera publiko desberdinik agintzen. Amaiera-puntuak programatzen ditu. Azken identitatea amaiera-puntu bakoitzak ematen duen bidearen propietate izaten jarraitzen du.