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 ले एकैसाथ हुने कलब्याकहरूबीच छनोट क्रम सुरक्षित गर्छ। ढिलो नेटवर्क अनुरोध पूरा हुँदा लक समात्न आवश्यक पर्दैन।
केवल छाप्नका लागि मार्ग खर्च नगर्नुहोस्
निदान सन्देशका लागि चयनकर्तालाई फेरि कल गर्दा काउन्टर फेरि अगाडि बढ्छ। त्यो आउटपुटले तपाईंले अनुसन्धान गरिरहेको अनुरोधले प्रयोग गरेको उम्मेदवारको सट्टा अर्को उम्मेदवारको वर्णन गर्न सक्छ। वास्तविक कलब्याकभित्र सुरक्षित एन्डपोइन्ट पहिचानकर्तासहित छनोट रेकर्ड गर्नुहोस्।
कलब्याक आह्वान गर्नु अनुरोध सफलतापूर्वक पुर्याइएको प्रमाण होइन। रिडाइरेक्ट वा थप ट्रान्सपोर्ट प्रयासहरूले “एक अनुप्रयोग कल, एक छनोट” भन्ने सरल धारणालाई जटिल बनाउन सक्छन्। यदि कुनै कार्यप्रवाहले धेरै कार्यहरूभरि एउटा मार्ग कायम राख्नुपर्छ भने, विश्वव्यापी घुम्ने कलब्याक प्रयोग गर्नुको सट्टा कार्यप्रवाहको सीमामा त्यो मार्ग छान्नुहोस्।
राउन्ड-रोबिनले फरक सार्वजनिक निर्गमनहरूको वाचा पनि गर्दैन। यो एन्डपोइन्टहरूको तालिका बनाउँछ। अन्तिम पहिचान प्रत्येक एन्डपोइन्टले दिने मार्गको गुण रहन्छ।