ਚੋਣਕਰਤਾ ਪੂਰੀ ਤਰ੍ਹਾਂ ਘੁੰਮ ਸਕਦਾ ਹੈ ਅਤੇ ਫਿਰ ਵੀ ਪਹਿਲਾ ਪ੍ਰਾਕਸੀ ਹੀ ਚੁਣਦਾ ਰਹਿ ਸਕਦਾ ਹੈ। ਗਲਤੀ ਇਹ ਹੈ ਕਿ ਹਰ ਬੇਨਤੀ ਲਈ ਗਲਤੀ ਨਾਲ ਨਵਾਂ ਚੋਣਕਰਤਾ ਬਣਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ, ਜੋ ਦੂਜੀ ਚੋਣ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਹੀ ਇਸ ਦਾ ਕਾਊਂਟਰ ਰੀਸੈਟ ਕਰ ਦਿੰਦਾ ਹੈ।

ਚੋਣਕਰਤਾ ਇੱਕ ਵਾਰ ਬਣਾਓ ਅਤੇ ਇਸ ਨੂੰ ਟਰਾਂਸਪੋਰਟ ਨਾਲ ਰੱਖੋ। 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 ਸਮਕਾਲੀ ਕਾਲਬੈਕਾਂ ਵਿਚਕਾਰ ਚੋਣ ਦੇ ਕ੍ਰਮ ਦੀ ਰੱਖਿਆ ਕਰਦਾ ਹੈ। ਹੌਲੀ ਨੈੱਟਵਰਕ ਬੇਨਤੀ ਪੂਰੀ ਹੋਣ ਦੌਰਾਨ ਤਾਲਾ ਫੜੀ ਰੱਖਣ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ।

ਸਿਰਫ਼ ਛਾਪਣ ਲਈ ਮਾਰਗ ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ

ਨਿਦਾਨ ਸੰਦੇਸ਼ ਲਈ ਚੋਣਕਰਤਾ ਨੂੰ ਦੁਬਾਰਾ ਕਾਲ ਕਰਨਾ ਕਾਊਂਟਰ ਨੂੰ ਫਿਰ ਅੱਗੇ ਵਧਾਉਂਦਾ ਹੈ। ਉਹ ਨਤੀਜਾ ਤੁਹਾਡੇ ਵੱਲੋਂ ਜਾਂਚੀ ਜਾ ਰਹੀ ਬੇਨਤੀ ਵੱਲੋਂ ਵਰਤੇ ਉਮੀਦਵਾਰ ਦੀ ਥਾਂ ਅਗਲੇ ਉਮੀਦਵਾਰ ਦਾ ਵਰਣਨ ਕਰ ਸਕਦਾ ਹੈ। ਅਸਲ ਕਾਲਬੈਕ ਦੇ ਅੰਦਰ ਸੁਰੱਖਿਅਤ ਐਂਡਪੌਇੰਟ ਪਛਾਣਕਰਤਾ ਨਾਲ ਚੋਣ ਦਰਜ ਕਰੋ।

ਕਾਲਬੈਕ ਦਾ ਸੱਦਾ ਇਹ ਸਬੂਤ ਨਹੀਂ ਕਿ ਬੇਨਤੀ ਸਫਲਤਾਪੂਰਵਕ ਪਹੁੰਚੀ। ਰੀਡਾਇਰੈਕਟ ਜਾਂ ਵਾਧੂ ਟਰਾਂਸਪੋਰਟ ਕੋਸ਼ਿਸ਼ਾਂ “ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਕਾਲ, ਇੱਕ ਚੋਣ” ਵਰਗੀ ਸਧਾਰਨ ਧਾਰਣਾ ਨੂੰ ਗੁੰਝਲਦਾਰ ਬਣਾ ਸਕਦੀਆਂ ਹਨ। ਜੇ ਕਿਸੇ ਵਰਕਫ਼ਲੋ ਨੂੰ ਕਈ ਕਾਰਜਾਂ ਦੌਰਾਨ ਇੱਕ ਮਾਰਗ ਰੱਖਣਾ ਹੈ, ਤਾਂ ਗਲੋਬਲ ਘੁੰਮਦੇ ਕਾਲਬੈਕ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦੀ ਥਾਂ ਵਰਕਫ਼ਲੋ ਦੀ ਹੱਦ 'ਤੇ ਉਹ ਮਾਰਗ ਚੁਣੋ।

ਰਾਊਂਡ-ਰੋਬਿਨ ਵੱਖਰੇ ਜਨਤਕ ਨਿਕਾਸਾਂ ਦਾ ਵਾਅਦਾ ਵੀ ਨਹੀਂ ਕਰਦਾ। ਇਹ ਐਂਡਪੌਇੰਟਾਂ ਦਾ ਸਮਾਂ-ਸਾਰਣੀ ਬਣਾਉਂਦਾ ਹੈ। ਅੰਤਿਮ ਪਛਾਣ ਹਰ ਐਂਡਪੌਇੰਟ ਵੱਲੋਂ ਦਿੱਤੇ ਮਾਰਗ ਦੀ ਵਿਸ਼ੇਸ਼ਤਾ ਬਣੀ ਰਹਿੰਦੀ ਹੈ।

ਸੰਬੰਧਿਤ ਲੇਖ