Dewisydd procsi cylchdroi a rennir yn Go
Cadwch ddewisyydd procsi Go yn fyw ar draws ceisiadau, amddiffynwch y cyflwr dewis a rennir, a gwahaniaethwch ddewis llwybr oddi wrth arsylwi ei allanfa.
Gall dewisydd gylchdroi’n berffaith a dal i ddewis y procsi cyntaf. Y camgymeriad yw creu dewisydd newydd ar gyfer pob cais yn ddamweiniol, sy’n ailosod ei gyfrifydd cyn iddo gael ail ddewis.
Adeiladwch y dewisydd unwaith a’i gadw gyda’r trafnidiaeth. Gall y rhestr procsi HTTP ddarparu ymgeiswyr HTTP cyhoeddus ar gyfer y set URL pan fydd y ceisiadau’n caniatáu cyfryngwyr cyhoeddus. Dechreuwch â rhestr URL procsi sydd eisoes wedi’i dilysu ac nad yw’n wag:
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
}
}
Rhaid i’r cymhwysiad o amgylch wrthod rhestr wag, dilysu’r URLau, a defnyddio’r mewnforion arferol net/http, net/url a sync. Dylai’r rhestr aros yn annewidiol tra bod y dewisydd hwn yn ei defnyddio, neu gael ei disodli drwy gynllun a gydamserir ar wahân.
Atodwch y ffwythiant a ddychwelwyd at un http.Transport a gedwir. Mae’r mutex yn gwarchod y dilyniant dewis ar draws galwadau-yn-ôl cydamserol. Nid yw’n gofyn am ddal clo tra bod cais rhwydwaith araf yn cwblhau.
Peidiwch â defnyddio llwybr dim ond i’w brintio
Mae galw’r dewisydd eto ar gyfer neges ddiagnostig yn symud y cyfrifydd eto. Efallai y bydd yr allbwn hwnnw’n disgrifio’r ymgeisydd nesaf yn lle’r ymgeisydd a ddefnyddiwyd gan y cais rydych yn ei archwilio. Cofnodwch y dewis y tu mewn i’r alwad-yn-ôl go iawn gan ddefnyddio dynodwr diweddbwynt diogel.
Nid yw galwad-yn-ôl yn brawf bod cais wedi’i ddanfon yn llwyddiannus. Gall ailgyfeirio neu ymdrechion trafnidiaeth ychwanegol gymhlethu’r dybiaeth syml “un alwad cymhwysiad, un dewis”. Os oes rhaid i lif gwaith gadw un llwybr drwy sawl gweithrediad, dewiswch y llwybr hwnnw ar ffin y llif gwaith yn lle defnyddio galwad-yn-ôl cylchdroi byd-eang.
Nid yw cylchdroi ychwaith yn addo allanfeydd cyhoeddus gwahanol. Mae’n amserlennu diweddbwyntiau. Mae’r hunaniaeth derfynol yn parhau’n briodwedd o’r llwybr y mae pob diweddbwynt yn ei ddarparu.