Aṣayan kan lè yí dáadáa kí ó sì ṣì máa yan aṣoju àkọ́kọ́. Àṣìṣe ni kí a ṣẹ̀dá aṣayan tuntun fún gbogbo ìbéèrè, èyí tí ó tún kàkà rẹ̀ ṣe kí ó tó ní yíyan kejì.

Kọ́ aṣayan náà lẹ́ẹ̀kan ṣoṣo kí o sì pa á mọ́ pẹ̀lú ìgbékalẹ̀. Àkójọ aṣoju HTTP lè pèsè àwọn olùdíje HTTP gbogbogbò fún àkójọ URL nígbà tí àwọn ìbéèrè bá gbà àwọn alárinà gbogbogbò. Bẹ̀rẹ̀ pẹ̀lú àkójọ URL aṣoju tí a ti ṣàyẹ̀wò tẹ́lẹ̀ tí kò sì ṣófo:

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

Ohun èlò tí ó yí i ká gbọ́dọ̀ kọ̀ àkójọ tí ó ṣófo, ṣàyẹ̀wò àwọn URL, kí ó sì lo àwọn ìwọlé deede net/http, net/url àti sync. Àkójọ náà yẹ kí ó máà yí padà nígbà tí aṣayan yìí ń lò ó, tàbí kí a rọ́pò rẹ̀ pẹ̀lú àpẹẹrẹ tí a ti ṣe ìsopọ̀ lọ́tọ̀.

So iṣẹ́ tí a dá padà mọ́ http.Transport kan tí a pa mọ́. Mutex ń dáàbò bo ìtẹ̀léǹtẹ̀lé yíyan láàárín àwọn ìpèpadà tí ó ṣẹlẹ̀ lẹ́ẹ̀kan. Kò nílò kí a di ìtìlẹ̀kùn mú nígbà tí ìbéèrè nẹ́tíwọ́kì tí ó lọra ń parí.

Má ṣe lo ipa-ọ̀nà kan kìkì láti tẹ̀ ẹ́ jáde

Pípè aṣayan náà lẹ́ẹ̀kan sí i fún ìfiránṣẹ́ àyẹ̀wò ń tẹ kàkà náà síwájú lẹ́ẹ̀kan sí i. Àbájáde yẹn lè ṣàpèjúwe olùdíje tí ó kàn tàbí kí ó ṣàpèjúwe olùdíje tí ìbéèrè tí ìwọ ń ṣèwádìí lò. Ṣàkọsílẹ̀ yíyan náà nínú ìpèpadà gidi pẹ̀lú ìdánimọ̀ ìparí tí ó ní ààbò.

Pípè ìpèpadà kì í ṣe ẹ̀rí pé a ti fi ìbéèrè ránṣẹ́ ní àṣeyọrí. Àwọn ìtúnjúwe tàbí ìgbìyànjú ìgbékalẹ̀ àfikún lè mú kí ìrònú rọrùn “ìpè ohun èlò kan, yíyan kan” di díjú. Tí iṣẹ́-ṣíṣe kan bá ní láti pa ipa-ọ̀nà kan mọ́ káàkiri àwọn ìgbésẹ̀ púpọ̀, yan ipa-ọ̀nà yẹn ní ààlà iṣẹ́-ṣíṣe dípò lílo ìpèpadà oní-ìyí-ìyí àgbáyé.

Ìyí-ìyí kò tún ṣèlérí àwọn àbájáde gbogbogbò tí ó yàtọ̀. Ó ń ṣètò àwọn ìparí. Ìdánimọ̀ ìkẹyìn ṣì jẹ́ ànímọ́ ti ipa-ọ̀nà tí gbogbo ìparí ń pèsè.

Àwọn àpilẹ̀kọ tó jọra