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 સાથે જોડો. મ્યુટેક્સ સમાંતર કૉલબેક વચ્ચે પસંદગીનો ક્રમ સુરક્ષિત કરે છે. ધીમી નેટવર્ક વિનંતી પૂરી થાય ત્યારે લૉક પકડી રાખવાની જરૂર નથી.
માત્ર છાપવા માટે માર્ગનો વપરાશ કરશો નહીં
નિદાન સંદેશ માટે ચયનકર્તાને ફરી બોલાવવાથી કાઉન્ટર ફરી આગળ વધે છે. તે આઉટપુટ તપાસો છો તે વિનંતીએ વાપરેલા ઉમેદવારને બદલે આગલા ઉમેદવારનું વર્ણન કરી શકે છે. સુરક્ષિત એન્ડપોઇન્ટ ઓળખકર્તા સાથે પસંદગીને વાસ્તવિક કૉલબેકની અંદર નોંધો.
કૉલબેક બોલાવવો એ વિનંતી સફળતાપૂર્વક પહોંચી તેનો પુરાવો નથી. રીડાયરેક્ટ અથવા વધારાના ટ્રાન્સપોર્ટ પ્રયાસો “એક એપ્લિકેશન કૉલ, એક પસંદગી”ની સરળ ધારણાને જટિલ બનાવી શકે છે. જો વર્કફ્લોને ઘણી ક્રિયાઓ દરમિયાન એક માર્ગ રાખવો હોય, તો વૈશ્વિક ફરતા કૉલબેકને બદલે વર્કફ્લોની સીમા પર તે માર્ગ પસંદ કરો.
રાઉન્ડ-રોબિન અલગ જાહેર નિર્ગમનોનું વચન પણ આપતું નથી. તે એન્ડપોઇન્ટ્સનું સમયપત્રક બનાવે છે. અંતિમ ઓળખ દરેક એન્ડપોઇન્ટ પૂરો પાડતા માર્ગની એક ગુણવત્તા રહે છે.