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 таңдау реттілігін бір мезгілдегі қайта шақырулар арасында қорғайды. Баяу желілік сұраныс аяқталған кезде құлыпты ұстауды талап етпейді.
Маршрутты тек басып шығару үшін жұмсамаңыз
Диагностикалық хабарлама үшін селекторды қайта шақыру санауышты тағы да алға жылжытады. Бұл шығыс сіз зерттеп жатқан сұраныс пайдаланған кандидаттың орнына келесі кандидатты сипаттауы мүмкін. Таңдауды нақты қайта шақырудың ішінде қауіпсіз соңғы нүкте идентификаторымен жазып алыңыз.
Қайта шақыруды шақыру сұраныстың сәтті жеткізілгенін дәлелдемейді. Қайта бағыттау немесе қосымша транспорт әрекеттері «бір қолданба шақыруы, бір таңдау» деген қарапайым болжамды қиындатуы мүмкін. Егер жұмыс ағыны бірнеше операция бойы бір маршрутты сақтауы керек болса, ғаламдық айналмалы қайта шақыруды пайдаланудың орнына сол маршрутты жұмыс ағынының шекарасында таңдаңыз.
Айналмалы кезек те әртүрлі жалпыға ортақ шығуларды уәде етпейді. Ол соңғы нүктелерді жоспарлайды. Соңғы бірегейлік әр соңғы нүкте ұсынатын жолдың қасиеті болып қалады.