एक चयनकर्ता पूरी तरह घूम सकता है और फिर भी पहला प्रॉक्सी चुनता रह सकता है। गलती यह है कि हर अनुरोध के लिए भूलवश नया चयनकर्ता बना दिया जाता है, जो दूसरा विकल्प चुनने से पहले ही उसके काउंटर को रीसेट कर देता है।

चयनकर्ता को एक बार बनाएँ और उसे ट्रांसपोर्ट के साथ रखें। 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 से जोड़ें। म्यूटेक्स समवर्ती कॉलबैक के बीच चयन क्रम की रक्षा करता है। धीमे नेटवर्क अनुरोध के पूरा होने के दौरान इसे लॉक रखने की आवश्यकता नहीं होती।

किसी मार्ग को केवल छापने के लिए मत खर्च करें

निदान संदेश के लिए चयनकर्ता को फिर से कॉल करने से काउंटर फिर आगे बढ़ जाता है। वह आउटपुट उस उम्मीदवार के बजाय अगले उम्मीदवार का वर्णन कर सकता है जिसका उपयोग आपकी जाँच वाले अनुरोध ने किया। वास्तविक कॉलबैक के भीतर सुरक्षित एंडपॉइंट पहचानकर्ता के साथ चयन रिकॉर्ड करें।

कॉलबैक का आह्वान यह प्रमाण नहीं है कि अनुरोध सफलतापूर्वक पहुँचाया गया। रीडायरेक्ट या अतिरिक्त ट्रांसपोर्ट प्रयास “एक एप्लिकेशन कॉल, एक चयन” की सरल धारणा को जटिल बना सकते हैं। यदि किसी वर्कफ़्लो को कई कार्यों के दौरान एक मार्ग बनाए रखना है, तो वैश्विक घूमने वाले कॉलबैक का उपयोग करने के बजाय वर्कफ़्लो की सीमा पर वह मार्ग चुनें।

राउंड-रोबिन अलग-अलग सार्वजनिक निर्गमों का वादा भी नहीं करता। यह एंडपॉइंट्स को निर्धारित करता है। अंतिम पहचान हर एंडपॉइंट द्वारा दिए गए पथ का गुण बनी रहती है।

संबंधित लेख