Aṣayan aṣoju oní-ìyí-ìyí tí ó pín ní Go
Jẹ́ kí aṣayan aṣoju Go wà láàyè láàárín àwọn ìbéèrè, dáàbò bo ipò yíyan tí ó pín, kí o sì yà sọ́tọ̀ yíyan ipa-ọ̀nà kúrò nínú wíwo àbájáde rẹ̀.
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è.