Ang isang selector ay maaaring umikot nang perpekto at patuloy pa ring piliin ang unang proxy. Ang pagkakamali ay ang aksidenteng paglikha ng bagong selector para sa bawat kahilingan, na nire-reset ang counter nito bago pa ito magkaroon ng pangalawang pagpipilian.

Buuin ang selector nang isang beses at panatilihin ito kasama ng transport. Ang listahan ng HTTP proxy ay makapagbibigay ng pampublikong HTTP na kandidato para sa set ng URL kapag pinapayagan ng mga kahilingan ang pampublikong tagapamagitan. Magsimula sa isang na-validate na, hindi walang laman na listahan ng proxy URL:

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

Dapat tanggihan ng nakapaligid na aplikasyon ang walang laman na listahan, i-validate ang mga URL at gamitin ang karaniwang net/http, net/url at sync import. Dapat manatiling hindi nagbabago ang listahan habang ginagamit ito ng selector na ito, o mapalitan sa pamamagitan ng hiwalay na naka-synchronize na disenyo.

Ikabit ang ibinalik na function sa isang pinanatiling http.Transport. Pinoprotektahan ng mutex ang pagkakasunod-sunod ng pagpili sa mga sabay na callback. Hindi nito kailangang hawakan ang lock habang natatapos ang mabagal na kahilingan sa network.

Huwag ubusin ang ruta para lamang i-print ito

Ang muling pagtawag sa selector para sa diagnostic na mensahe ay muling nagpapausad sa counter. Maaaring ilarawan ng output na iyon ang susunod na kandidato sa halip na ang kandidatong ginamit ng kahilingang iniimbestigahan mo. Itala ang pagpili sa loob ng tunay na callback gamit ang ligtas na identifier ng endpoint.

Ang pagtawag ng callback ay hindi patunay na matagumpay na naihatid ang isang kahilingan. Ang mga redirect o karagdagang pagtatangka sa transport ay maaaring magpahirap sa simpleng palagay na “isang tawag sa aplikasyon, isang pagpili”. Kung kailangang panatilihin ng isang workflow ang isang ruta sa maraming operasyon, piliin ang rutang iyon sa hangganan ng workflow sa halip na gumamit ng pandaigdigang umiikot na callback.

Ang round-robin ay hindi rin nangangako ng magkakaibang pampublikong labasan. Nag-iiskedyul ito ng mga endpoint. Ang huling pagkakakilanlan ay nananatiling katangian ng landas na ibinibigay ng bawat endpoint.

Kaugnay na mga artikulo