Go тилиндеги жалпы айланма прокси тандагыч
Go прокси тандагычын сурамдар арасында тирүү кармаңыз, жалпы тандоо абалын коргоңуз жана маршрутту тандоону анын чыгышын байкоодон ажыратыңыз.
Тандагыч кемчиликсиз айланып, ошентсе да биринчи проксини тандай бериши мүмкүн. Ката — ар бир сурам үчүн кокустан жаңы тандагыч түзүү; бул экинчи тандоо жасоодон мурун анын эсептегичин нөлдөйт.
Тандагычты бир жолу куруп, аны транспорт менен бирге кармаңыз. HTTP прокси тизмеси сурамдар коомдук ортомчуларга жол бергенде URL топтому үчүн коомдук HTTP талапкерлерин бере алат. Мурун текшерилген, бош эмес прокси 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
}
}
Айлана-чөйрөдөгү колдонмо бош тизмени четке кагууга, URL дарегин текшерүүгө жана кадимки net/http, net/url жана sync импортторун колдонууга тийиш. Бул тандагыч аны колдонуп жатканда тизме өзгөрбөй турушу керек, же өзүнчө синхрондоштурулган долбоор аркылуу алмаштырылышы керек.
Кайтарылган функцияны бир сакталган http.Transport менен байланыштырыңыз. Mutex тандоо ырааттуулугун бир убактагы кайтарым чакыруулардын ортосунда коргойт. Жай тармактык сурам бүткөндө кулпуну кармоону талап кылбайт.
Маршрутту жөн гана басып чыгаруу үчүн коротпоңуз
Диагностикалык билдирүү үчүн тандагычты кайра чакыруу эсептегичти дагы алдыга жылдырат. Ал чыгыш сиз иликтеп жаткан сурам колдонгон талапкердин ордуна кийинки талапкерди сүрөттөшү мүмкүн. Тандоону чыныгы кайтарым чакыруунун ичинде коопсуз акыркы чекит идентификатору менен жазыңыз.
Кайтарым чакырууну чакыруу сурамдын ийгиликтүү жеткирилгенин далилдебейт. Кайра багыттоолор же кошумча транспорт аракеттери «бир колдонмо чакыруусу, бир тандоо» деген жөнөкөй божомолду татаалдаштырышы мүмкүн. Эгер жумуш агымы бир нече операциянын ичинде бир маршрутту сакташы керек болсо, глобалдык айланма кайтарым чакырууну колдонуунун ордуна ошол маршрутту жумуш агымынын чегинде тандаңыз.
Айланма кезек да айырмаланган коомдук чыгыштарды убада кылбайт. Ал акыркы чекиттерди пландаштырат. Акыркы инсандык ар бир акыркы чекит сунуштаган жолдун касиети бойдон калат.