Կիսվող շրջանաձև պրոքսի ընտրիչ Go-ում
Պահեք Go պրոքսի ընտրիչը կենդանի հարցումների միջև, պաշտպանեք կիսվող ընտրության վիճակը և տարբերեք ուղու ընտրությունը նրա ելքի դիտարկումից։
Ընտրիչը կարող է կատարյալ պտտվել և միևնույն ժամանակ միշտ ընտրել առաջին պրոքսին։ Սխալը յուրաքանչյուր հարցման համար պատահականորեն նոր ընտրիչ ստեղծելն է, ինչը զրոյացնում է նրա հաշվիչը նախքան երկրորդ ընտրություն կատարելը։
Կառուցեք ընտրիչը մեկ անգամ և պահեք այն տրանսպորտի հետ։ HTTP պրոքսիների ցանկը կարող է տրամադրել հանրային HTTP թեկնածուներ URL-ների բազմության համար, երբ հարցումները թույլատրում են հանրային միջնորդներ։ Սկսեք արդեն ստուգված, դատարկ չեղած պրոքսի 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-ը պաշտպանում է ընտրության հաջորդականությունը միաժամանակյա հետկանչերի միջև։ Այն չի պահանջում կողպեք պահել, քանի դեռ դանդաղ ցանցային հարցումն ավարտվում է։
Մի սպառեք ուղին միայն այն տպելու համար
Ընտրիչը կրկին կանչելը ախտորոշիչ հաղորդագրության համար նորից առաջ է տանում հաշվիչը։ Այդ ելքը կարող է նկարագրել հաջորդ թեկնածուին՝ փոխարենը ձեր հետազոտվող հարցման օգտագործած թեկնածուի։ Գրանցեք ընտրությունը իրական հետկանչի ներսում անվտանգ վերջնակետի նույնացուցիչով։
Հետկանչի կանչը ապացույց չէ, որ հարցումը հաջողությամբ հասցվել է։ Վերահասցեավորումները կամ լրացուցիչ տրանսպորտային փորձերը կարող են բարդացնել «մեկ հավելվածի կանչ, մեկ ընտրություն» պարզ ենթադրությունը։ Եթե աշխատահոսքը պետք է պահպանի մեկ ուղի մի քանի գործողությունների ընթացքում, ընտրեք այդ ուղին աշխատահոսքի սահմանին՝ փոխարենը գլոբալ պտտվող հետկանչ օգտագործելու։
Շրջանաձև հերթափոխը նույնպես չի խոստանում տարբեր հանրային ելքեր։ Այն պլանավորում է վերջնակետեր։ Վերջնական ինքնությունը մնում է յուրաքանչյուր վերջնակետի տրամադրած ուղու հատկությունը։