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 ഒരേസമയം നടക്കുന്ന കോൾബാക്കുകൾക്കിടയിൽ തിരഞ്ഞെടുപ്പ് ക്രമം സംരക്ഷിക്കുന്നു. മന്ദഗതിയിലുള്ള നെറ്റ്വർക്ക് അഭ്യർത്ഥന പൂർത്തിയാകുമ്പോൾ ലോക്ക് കൈവശം വയ്ക്കേണ്ടതില്ല.
അച്ചടിക്കാൻ മാത്രം ഒരു പാത ഉപഭോഗിക്കരുത്
ഒരു ഡയഗ്നോസ്റ്റിക് സന്ദേശത്തിനായി സെലക്ടറെ വീണ്ടും വിളിക്കുന്നത് കൗണ്ടറിനെ വീണ്ടും മുന്നോട്ട് നീക്കും. ആ ഔട്ട്പുട്ട് നിങ്ങൾ അന്വേഷിക്കുന്ന അഭ്യർത്ഥന ഉപയോഗിച്ച സ്ഥാനാർത്ഥിക്കുപകരം അടുത്ത സ്ഥാനാർത്ഥിയെ വിവരിച്ചേക്കാം. യഥാർത്ഥ കോൾബാക്കിനുള്ളിൽ സുരക്ഷിത എൻഡ്പോയിന്റ് ഐഡന്റിഫയർ ഉപയോഗിച്ച് തിരഞ്ഞെടുപ്പ് രേഖപ്പെടുത്തുക.
ഒരു കോൾബാക്ക് വിളിക്കുന്നത് അഭ്യർത്ഥന വിജയകരമായി എത്തിയതിന്റെ തെളിവല്ല. വീണ്ടും വഴിതിരിച്ചുവിടലുകളോ അധിക ട്രാൻസ്പോർട്ട് ശ്രമങ്ങളോ “ഒരു ആപ്ലിക്കേഷൻ വിളി, ഒരു തിരഞ്ഞെടുപ്പ്” എന്ന ലളിതമായ അനുമാനത്തെ സങ്കീർണ്ണമാക്കാം. ഒരു വർക്ക്ഫ്ലോ പല പ്രവർത്തനങ്ങളിലുടനീളം ഒരു പാത നിലനിർത്തേണ്ടതുണ്ടെങ്കിൽ, ആഗോള കറങ്ങുന്ന കോൾബാക്ക് ഉപയോഗിക്കുന്നതിനുപകരം ആ പാത വർക്ക്ഫ്ലോയുടെ അതിരിൽ തിരഞ്ഞെടുക്കുക.
റൗണ്ട്-റോബിൻ വ്യത്യസ്ത പൊതു പുറത്തുകടക്കലുകളും വാഗ്ദാനം ചെയ്യുന്നില്ല. അത് എൻഡ്പോയിന്റുകൾ ഷെഡ്യൂൾ ചെയ്യുന്നു. അന്തിമ ഐഡന്റിറ്റി ഓരോ എൻഡ്പോയിന്റും നൽകുന്ന പാതയുടെ സ്വത്തായി തുടരുന്നു.